Я пытаюсь переопределить некоторые действия модели Django UserAdmin.В частности, я бы хотел скрыть поле 'superuser' от не суперпользователей.
Итак, мой подход такой:
class ModelAdmin(BaseModelAdmin):
"Encapsulates all admin options and functionality for a given model."
# ...
def has_change_permission(self, request, obj=None):
"""
Returns True if the given request has permission to change the given
Django model instance.
If `obj` is None, this should return True if the given request has
permission to change *any* object of the given type.
"""
opts = self.opts
return request.user.has_perm(opts.app_label + '.' + opts.get_change_permission())
#...
Основываясь на том, что я нашел в ModelAdmin
class UserAdmin(UserAdmin):
"""
... my customised UserAdmin
"""
# adding a new method
def is_superuser(self, request):
"Returns True if the given user is a superuser."
return request.user.is_superuser
# then elsewhere 'hopefully' show a slightly different fieldset
# the following, of course, doesn't work.
fieldsets = (
(None, {
'fields': (
("first_name", "last_name"),
("email", "password"),
"is_staff",
"is_active",
"is_superuser" if self.is_superuser() else None
)
}),
('Groups', {
'fields': (
'groups',
)
}),
('Meta', {
'classes': ('collapse',),
'fields': (
'username',
"last_login",
"date_joined"
)
})
)
Итак, мои вопросы:
- Как мне создать
def
в моем новом пользовательском классе UserAdmin, таком как выше, и как мне его вызвать?(Как мне узнать, когда я нахожусь в правильном контексте для этого) - Часть 2 (бонус): как я могу кратко включить / исключить поле 'is_superuser' в форме, как код psuedo вышепредлагает?
Доброе спасибо, ребята!
~ Дэрил
Спасибо