from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
first_name = models.CharField(max_length=150, editable=False)
last_name = models.CharField(max_length=150, editable=False)
name = models.CharField(max_length=150, default="")
is_host = models.BooleanField(default=False)
first_name과 last_name을 editable=false로 해두었는데 관리자 페이지에 들어가면 편집행위가 들어가기때문에 에러가 발생한것
이를 해결하기위해서는 Admin class를 수정하거나 덮어써야함
fieldset은 관리자 페이지에서 model의 field가 보이는 순서를 설정할 수 있게 해줌
또한 섹션안에 field를 넣어서 그 섹션에 제목을 붙일 수 있게 해줌
위의 에러는 fieldset를 사용하면 해결됨
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
@admin.register(User) # 이 클래스가 User를 관리한다고 선언하는것
class CustomUserAdmin(UserAdmin):
fieldsets = None
fields = ("email", "password", "name")
filedsets을 사용해서 섹션과 속성을 넣을 수도 있음
@admin.register(User) # 이 클래스가 User를 관리한다고 선언하는것
class CustomUserAdmin(UserAdmin):
fieldsets = (
(
"Profile", {
"fields": ("username", "password", "name", "email", "is_host"),
}
),
)
참고)
결국은 상속 받은 UserAdmin 재정의 하는 것임 auth.admin.py에 들어가면 비슷한 코드들이 있음
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
add_form_template = "admin/auth/user/add_form.html"
change_user_password_template = None
fieldsets = (
(None, {"fields": ("username", "password")}),
(_("Personal info"), {"fields": ("first_name", "last_name", "email")}),
(
_("Permissions"),
{
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
),
},
),
(_("Important dates"), {"fields": ("last_login", "date_joined")}),
)
add_fieldsets = (
(
None,
{
"classes": ("wide",),
"fields": ("username", "password1", "password2"),
},
),
)
form = UserChangeForm
add_form = UserCreationForm
change_password_form = AdminPasswordChangeForm
list_display = ("username", "email", "first_name", "last_name", "is_staff")
list_filter = ("is_staff", "is_superuser", "is_active", "groups")
search_fields = ("username", "first_name", "last_name", "email")
ordering = ("username",)
filter_horizontal = (
"groups",
"user_permissions",
)
권한 추가, important dates(마지막로그인,등록일)추가
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
@admin.register(User) # 이 클래스가 User를 관리한다고 선언하는것
class CustomUserAdmin(UserAdmin):
fieldsets = (
(
"Profile", {
"fields": ("username", "password", "name", "email", "is_host"),
}
),
(
"Permissions", {
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
),
}
),
(
"Important dates", {
"fields": (
"last_login", "date_joined"
)
}
)
)
fieldsets은 단순 fields보다 더 많은 기능을 가지고 있음
classes
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
@admin.register(User) # 이 클래스가 User를 관리한다고 선언하는것
class CustomUserAdmin(UserAdmin):
fieldsets = (
(
"Profile", {
"fields": ("username", "password", "name", "email", "is_host"),
"classes": ("wide",)
}
),
(
"Permissions", {
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
),
"classes": ("collapse",)
}
),
(
"Important dates", {
"fields": (
"last_login", "date_joined"
),
"classes": ("collapse",)
}
)
)
classes를 사용하여 섹션이 접힌 상태로 보이게 하거나 넓게 보이게 할 수 있음, wide는 별차이 안나던데.. 넓어지긴함
리스트 커스터마이징하기
list_display 추가하면 됨, list_display에 model에 없는 값 넣으면 에러남
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
@admin.register(User) # 이 클래스가 User를 관리한다고 선언하는것
class CustomUserAdmin(UserAdmin):
fieldsets = (
(
"Profile", {
"fields": ("username", "password", "name", "email", "is_host"),
"classes": ("wide",)
}
),
(
"Permissions", {
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
),
"classes": ("collapse",)
}
),
(
"Important dates", {
"fields": (
"last_login", "date_joined"
),
"classes": ("collapse",)
}
)
)
list_display = ("username", "email", "name", "is_host")
'2024 > python 개발자 되기' 카테고리의 다른 글
[Day-6][Django] User Model (0) | 2024.05.21 |
---|---|
[Day-5][Django] 외래키 (1) | 2024.05.21 |
[Day-4][Django] Custom User add Custom Fields (0) | 2024.05.20 |
[Day-3][Django] Custom User (0) | 2024.05.19 |
[Day-2][Django] User 패널 수정 (0) | 2024.05.18 |