Настройка формы UserChangeForm в django
Я хочу удалить поле 'groups' из встроенной формы UserChangeForm и добавить свое собственное поле "Role". Как это сделать? Я создал свой класс, который наследуется от UserChangeForm и попытался как-то удалить, но никаких изменений.
class CustomUserChangeForm(UserChangeForm):
def __init__(self, *args, **kwargs):
super(CustomUserChangeForm, self).__init__(*args, **kwargs)
self.exclude = ('groups',)
class CustomUserAdmin(UserAdmin):
change_form = CustomUserChangeForm()
def __init__(self, *args, **kwargs):
super(UserAdmin, self).__init__(*args, **kwargs)
UserAdmin.list_display = ('username', 'is_active', 'email',
'date_joined', 'user_role', 'is_staff', 'is_superuser')
admin.site.register(User, CustomUserAdmin)
Вы можете унаследовать Meta
от UserChangeForm
и переписать поле exclude
, чтобы исключить groups
:
class CustomUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
fields = None
exclude = ('groups',)
Для администрирования сайта вы можете работать с:
from django.contrib.auth import get_user_model
class CustomUserAdmin(UserAdmin):
form = CustomUserChangeForm
list_display = ('username', 'is_active', 'email', 'date_joined',
'user_role', 'is_staff', 'is_superuser')
User = get_user_model()
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
Я удалил UserChangeForm, и я определяю наборы полей в CustomUseAdmin следующим образом: https://github.com/django/django/blob/main/django/contrib/auth/admin.py#L45
И работает правильно, но я не могу добавить свою модель 'Role' сюда
class CustomUserAdmin(UserAdmin):
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Permissions'), {
'fields': ('is_active', 'is_staff', 'is_superuser', 'user_role', 'user_permissions'),
}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
def __init__(self, *args, **kwargs):
super(UserAdmin, self).__init__(*args, **kwargs)
UserAdmin.list_display = ('username', 'is_active', 'email',
'date_joined', 'user_role', 'is_staff', 'is_superuser')
Неизвестное поле (поля) (user_role), указанное для User. Проверьте поля/наборы полей/атрибуты исключения класса CustomUserAdmin.
class Role(models.Model):
name = models.CharField(max_length=100, unique=True)
user = models.OneToOneField(User, related_name="user_role", on_delete=models.CASCADE)
role_permissions = models.ManyToManyField(Permission, related_name="role_permissions")
class Meta:
app_label = 'auth'