Skip to content

Commit

Permalink
Merge pull request #89 from pymasterspl/feature/user-settings/profile…
Browse files Browse the repository at this point in the history
…-in-admin

Feature/user settings/profile in admin
  • Loading branch information
konrad-paszek authored Oct 6, 2024
2 parents d2255e2 + a0c763e commit b87d44c
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 5 deletions.
17 changes: 16 additions & 1 deletion users/admin.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,28 @@
from typing import ClassVar

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin

from users.models import User
from users.models import Profile, User, UserSettings

FieldsetsType = tuple[tuple[None, dict[str, str | tuple[str]]]]


class UserSettingAdmin(admin.StackedInline):
model = UserSettings
verbose_name = "Settings"
can_delete = False


class ProfileAdmin(admin.StackedInline):
model = Profile
verbose_name = "Profile"
can_delete = False


@admin.register(User)
class CustomUserAdmin(DjangoUserAdmin):
inlines: ClassVar[list] = [UserSettingAdmin, ProfileAdmin]
list_display: tuple[str] = ("nickname", "email", "is_staff", "is_online", "last_activity_ago", "avatar")
ordering: tuple[str] = ("email",)
fieldsets: FieldsetsType = ()
Expand Down
4 changes: 2 additions & 2 deletions users/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class UserSettings(models.Model):
is_over_18 = models.BooleanField(default=False)

def __str__(self: "UserSettings") -> str:
return f"Settings: {self.user}"
return f"{self.user}"


class Profile(models.Model):
Expand All @@ -83,7 +83,7 @@ class Profile(models.Model):
user = models.OneToOneField("User", on_delete=models.CASCADE, null=False)

def __str__(self: "Profile") -> str:
return f"Profile: {self.user.nickname}"
return f"{self.user.nickname}"

def nickname(self: "Profile") -> str:
return self.user.nickname
Expand Down
25 changes: 23 additions & 2 deletions users/tests/user_admin_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
from django.contrib import admin

import users.models
from users.admin import CustomUserAdmin
from users.models import User
from users.admin import CustomUserAdmin, ProfileAdmin, UserSettingAdmin
from users.models import Profile, User, UserSettings

FieldsetsType = tuple[tuple[None, dict[str, str | tuple[str]]]]

Expand Down Expand Up @@ -48,3 +48,24 @@ def test_add_fieldsets(model_admin: admin.ModelAdmin) -> None:
),
)
assert model_admin.add_fieldsets == expected_fields


def test_user_setting_inline_user(model_admin: admin.ModelAdmin) -> None:
inlines = model_admin.inlines
assert UserSettingAdmin in inlines
user_setting_inline = next(inline for inline in inlines if inline == UserSettingAdmin)
assert user_setting_inline.model == UserSettings
assert user_setting_inline.verbose_name == "Settings"
assert user_setting_inline.extra == 3
assert user_setting_inline.can_delete is False


def test_user_profile_inline_user(model_admin: admin.ModelAdmin) -> None:
inlines = model_admin.inlines
assert ProfileAdmin in inlines
profile_inline = next(inline for inline in inlines if inline == ProfileAdmin)
assert profile_inline is not None
assert profile_inline.model == Profile
assert profile_inline.verbose_name == "Profile"
assert profile_inline.extra == 3
assert profile_inline.can_delete is False

0 comments on commit b87d44c

Please sign in to comment.