Я могу опоздать, чтобы ответить на этот вопрос, но в любом случае, здесь идет. Джон прав в концепции, но я просто хотел сделать это, потому что я знаю, django admin
действительно гибок.
Любой способ скрыть поля в форме модели пользователя:
1. exclude
атрибут класса ModelAdmin
может использоваться для скрытия полей.
2: Должен быть разрешен пробел в модели.
3: default
атрибут в поле модели является преимуществом, иначе вы можете получить непредвиденные ошибки.
У меня были проблемы с тем, что я получал ошибку проверки. Я посмотрел на след назад и обнаружил, что
ошибка произошла из-за группировки UserAdmin
fieldsets
, набор полей по умолчанию permission
имеет user_permission
переопределить это в администраторе вашей подкалассированной модели.
Используйте атрибут exclude
в get_form
, где вы можете получить доступ к переменной request
, и вы можете установить ее динамически в зависимости от разрешения пользователя или группы.
Код:
admin.py:
class MyUserAdmin(UserAdmin):
list_display = ("username","first_name", "last_name", "email","is_active","is_staff","last_login","date_joined")
## Static overriding
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
'groups')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
def get_form(self, request, obj=None, **kwargs):
self.exclude = ("user_permissions")
## Dynamically overriding
self.fieldsets[2][1]["fields"] = ('is_active', 'is_staff','is_superuser','groups')
form = super(MyUserAdmin,self).get_form(request, obj, **kwargs)
return form