【问题标题】:Make a field in fieldset of ModelAdmin required in Django在 Django 所需的 ModelAdmin 字段集中创建一个字段
【发布时间】:2021-06-08 02:45:42
【问题描述】:

我需要根据需要在 ModelAdmin 类的 fieldset 变量中创建一些字段,以便如果未在表单中选择这些字段,用户将无法创建或更新用户实例。我该怎么做?

class MyUserChangeForm(UserChangeForm):
    class Meta(UserChangeForm.Meta):
        model = User

class MyUserCreationForm(UserCreationForm):

    error_message = UserCreationForm.error_messages.update({
        'duplicate_username': 'This username has already been taken.'
    })
    class Meta(UserCreationForm.Meta):
        model = User

    def clean_username(self):
        username = self.cleaned_data["username"]
        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError(self.error_messages['duplicate_username'])


@admin.register(User)
class UserAdmin(AuthUserAdmin):
    fieldsets = AuthUserAdmin.fieldsets + (
            (None, {'fields': ('user_type', 'country')}),
    )
    add_form = MyUserCreationForm
    

在这里,我想在管理面板中根据需要设置国家和用户类型。我该怎么做?

【问题讨论】:

    标签: django django-forms django-admin


    【解决方案1】:

    虽然@Lewis 提供的答案是正确的,但它对我不起作用。 以下解决方案对我有用。

    @admin.register(User)
    class UserAdmin(AuthUserAdmin):
        fieldsets = AuthUserAdmin.fieldsets + (
                (None, {'fields': ('user_type', 'country')}),
        )
        add_form = MyUserCreationForm
    
        def get_form(self, request, obj=None, **kwargs):
            form = super(UserAdmin, self).get_form(request, obj, **kwargs)
            form.base_fields['user_type'].required = True
            form.base_fields['country'].required = True
            return form
    

    【讨论】:

      猜你喜欢
      • 2014-02-02
      • 2011-03-31
      • 1970-01-01
      • 2020-11-03
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2014-05-07
      相关资源
      最近更新 更多