Django中UserCreationForm的Meta类中字段的意义是什么?

问题描述 投票:1回答:1

我是Django新手,我有一个问题,我知道这个美丽社区的人可以帮助我回答。在我的Django项目中,我创建了一个具有自定义字段“ number”的自定义用户(使用AbstractUser)。自定义用户模型名为AdminUser。

#models.py
class AdminUser(AbstractUser):
   number = PhoneNumberField(blank=False, unique=True, editable=True)
   is_staff = models.BooleanField(default=True)
   is_superuser = models.BooleanField(default=False)

   REQUIRED_FIELDS = ['number']

   objects = AdminUserManager()

    def __str__(self):
       return self.username

我已经为此课程分配了一个自定义UserAdmin

#admin.py
class CustomUserAdmin(UserAdmin):
    form = AdminUserChangeForm
    add_form = AdminUserCreationForm
    model = AdminUser
    list_display = ['username', 'first_name', 'last_name', 'number']
    list_filter = ['is_superuser', 'first_name']

    """Fields when editing users"""
    fieldsets = UserAdmin.fieldsets + (
        ('Primary Contact', {'fields': ('number',)}),
    )

    """Fields when adding new user"""
    add_fieldsets = UserAdmin.add_fieldsets + (
        ('New User Credentials', {'fields': ('number', 'is_staff', 'is_superuser', 'first_name', 'last_name', 'email')}),
    )

以及类似的形式

#forms.py
class AdminUserCreationForm(UserCreationForm):

    class Meta(UserChangeForm.Meta):
        model = AdminUser
        #how does 'fields' below affect the form structure?? 
        fields = ('username', 'email', 'number')


class AdminUserChangeForm(UserChangeForm):

    class Meta:
        model = AdminUser
        fields = ('username', 'email', 'number')

我的问题是,forms.py中Meta类中的“字段”元组如何影响创建和更改表单的结构?当我将元素删除或添加到字段元组时,Django admin中的这些形式没有区别。CustomUserAdmin中的字段集和add_fieldsets会影响表单结构。那么,forms.py的Meta类中字段的用途是什么?它们只是仅供参考吗?

python django metaclass
1个回答
0
投票

我怀疑如果您的CustomerAdmin不是从UserAdmin继承的,它将按预期工作。您使用的ModelAdmin字段将覆盖表格上指定的fields

如果您使用ModelForms 在管理员外部,它也可以按您预期的方式工作,但是管理员有点老套,可能并不总是按照您的想法工作。

[通常,fields根据您的建议指定要显示模型中的哪些字段,并且在大多数情况下都可以使用(只是在这种情况下不行)。

© www.soinside.com 2019 - 2024. All rights reserved.