【问题标题】:Django UserAdmin's add_fieldsets?Django UserAdmin 的 add_fieldsets?
【发布时间】:2018-10-30 09:17:27
【问题描述】:

我正在关注有关制作自定义用户以进行身份​​验证的教程。本教程在 UserAdmin 中使用了某个属性 add_fieldsets。这是什么意思?我似乎找不到任何关于此的文档。

这里是sn-p:

class UserAdmin(UserAdmin):
"""Define admin model for custom User model with no email field."""

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('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')}),
        ('Contact info', {'fields': ('contact_no',)}),)

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2'),}),)

    list_display = ('email', 'first_name', 'last_name', 'is_staff')
    search_fields = ('email', 'first_name', 'last_name')
    ordering = ('email',)

这是我关注的教程:How to use email as username for Django authentication (removing the username)

【问题讨论】:

  • 这样做的效果是您从一组有限的表单字段开始,并且在您单击“保存”后新字段“神奇地”出现在表单上(在这种情况下与“保存并继续编辑”)。

标签: python django web django-models


【解决方案1】:

add_fieldsets 类变量用于定义将在创建用户页面上显示的字段。

不幸的是,它没有得到很好的记录,我发现最接近文档的是https://docs.djangoproject.com/en/2.1/topics/auth/customizing/ 上的代码示例中的注释(add_fieldsets 的搜索页面)。

classes 键设置我们想要应用于表单部分的任何自定义 CSS 类。

fields 键设置您希望在表单中显示的字段。

在您的示例中,创建页面将允许您设置 emailpassword1password2

【讨论】:

  • 没有文档的原因可能是因为:“... add_fieldsets is 不是标准 ModelAdmin 属性。@987654331 @ 覆盖 get_fieldsets 以在创建用户时使用此属性。” (来自上面链接的 auth/customizing/ 文档)。这只是对管理机制的巧妙使用。
【解决方案2】:

add_fieldsets 字段的作用类似于fieldsets 字段,允许控制管理页面的布局,但特别是创建对象页面,而字段集字段用于控制更改对象页面。

并且使用add_fieldsets 字段,您可以决定应在创建对象页面上显示哪些所有字段,添加描述等。

在您的示例中,它将创建一个没有名称的部分(设置为 None),使用 classes 键集为所有字段设置特定宽度并显示字段电子邮件、密码 1 和密码 2 通过使用键集fields

我希望我消除了你的疑问!

【讨论】:

    【解决方案3】:

    使用 BaseUserAdmin 类,它启用了一些功能,例如 add_fromsadd_fieldsets

    from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
    
    class UserAdmin(BaseUserAdmin):
        """Define admin model for custom User model with no email field."""
    
        fieldsets = (
            (None, {'fields': ('email', 'password')}),
            ('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')}),
            ('Contact info', {'fields': ('contact_no',)}),)
    
        add_fieldsets = (
            (None, {
                'classes': ('wide',),
                'fields': ('email', 'password1', 'password2'),}),)
    
        list_display = ('email', 'first_name', 'last_name', 'is_staff')
        search_fields = ('email', 'first_name', 'last_name')
        ordering = ('email',)
    

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 2012-06-16
      • 2013-02-07
      • 2014-05-08
      • 1970-01-01
      • 2018-01-29
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多