Настройка формы 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'
Вернуться на верх