为django admin用户添加更多验证添加表单

Wen*_*rth 10 django django-admin

如果我们需要在django管理员用户添加更多的验证添加表格,如使名字和姓氏和电子邮件强制..是什么方式实现这一点?

Geo*_*ALA 8

您必须创建自己的用户表单并添加必填字段:

class UserForm(forms.ModelForm):
    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True
        self.fields['first_name'].required = True
        self.fields['last_name'].required = True
Run Code Online (Sandbox Code Playgroud)

然后覆盖ModelAdmin中的表单:

class UserAdmin(admin.ModelAdmin):
    form = UserForm
Run Code Online (Sandbox Code Playgroud)

然后在注册自己的用户之前取消注册普通管理员用户:

admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)


ale*_*nia 6

这扩展了Geoffroy的答案:

from django.contrib.auth.forms import UserCreationForm
class UserForm(UserCreationForm):
    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True
        self.fields['first_name'].required = True
        self.fields['last_name'].required = True
Run Code Online (Sandbox Code Playgroud)

的ModelAdmin:

from django.contrib.auth.admin import UserAdmin
class CustomUserAdmin(UserAdmin):
    add_form = UserForm
    add_fieldsets = (
      (None, {'fields':('username','password1','password2','first_name','last_name','email'),}),)
Run Code Online (Sandbox Code Playgroud)

然后取消注册如上:

admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
Run Code Online (Sandbox Code Playgroud)