【问题标题】:Adding required email field to django when creating users with admin使用管理员创建用户时向 django 添加所需的电子邮件字段
【发布时间】:2013-02-24 14:51:25
【问题描述】:

使用 Django admin 创建/添加用户时;这个怎么定制?

例如,当前会提示输入用户名和密码。但是,我想自定义它以使其也具有其他必填字段,例如“电子邮件”?

Django 教程对管理员用户身份验证的自定义不清楚?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:
    1. 把它放在你的models.py

      from django.contrib.auth.models import User
      User._meta.get_field('email').blank = False
      
    2. 运行makemigrations

    3. 运行migrate

    See the documentation

    【讨论】:

    • 这使得我在管理员添加用户页面中需要“电子邮件”字段,就像最初的问题一样。这应该是公认的答案。
    • 似乎不适用于 Django 2.0。您可以链接任何有关此的文档吗?
    • @caliph,别忘了运行 makemigrations 和 migrate。
    【解决方案2】:

    创建用户时向表单添加电子邮件的示例。在项目admin.py 中添加了以下内容:

    from django.contrib.auth.admin import UserAdmin
    from django.contrib.auth.forms import UserCreationForm, UserChangeForm
    from django.contrib.auth.models import User
    from django.utils.translation import ugettext_lazy as _
    
    
    class UserAdmin(UserAdmin):
        fieldsets = (
            (None, {'fields': ('username', 'password','email')}),
            (_('Personal info'), {'fields': ('first_name', 'last_name')}),
            (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                           'groups', 'user_permissions')}),
            (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
        )
        add_fieldsets = (
            (None, {
                'classes': ('wide',),
                'fields': ('username', 'password1', 'password2', 'email')}
            ),
        )
        form = UserChangeForm
        add_form = UserCreationForm
    
    try:
        admin.site.unregister(User)
    except NotRegistered:
        pass
    
    admin.site.register(User, UserAdmin)
    

    【讨论】:

    • 有趣。 add_fieldsets 属性记录在 here 中,但不在 ModelAdmin reference 中。
    • 添加'email'到add_fieldsets后仍然不需要email。其他字段为粗体(必需),但电子邮件不是粗体。正确答案见 monmon29 的回答。
    【解决方案3】:

    这是您可以自定义用户管理员的方式:

    from django.contrib import admin
    from django.contrib.auth import admin as upstream
    
    # custom admin class for the User model, subclassing Django's one
    class UserAdmin(upstream.UserAdmin):
        add_form_template = ...
        add_form = ...
        add_fieldsets = ...
    
    # unregister any existing admin for the User model and register mine
    try:
        admin.site.unregister(User)
    except NotRegistered:
        pass
    admin.site.register(User, UserAdmin)
    

    我留下... 的部分是您需要进行的自定义,以更改管理员提示创建用户的方式。

    django/contrib/auth/admin.py中寻找原码,修改尝味。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-17
      • 2021-06-10
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多