我是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类中字段的用途是什么?它们只是仅供参考吗?
我怀疑如果您的CustomerAdmin
不是从UserAdmin
继承的,它将按预期工作。您使用的ModelAdmin字段将覆盖表格上指定的fields
。
如果您使用ModelForms 在管理员外部,它也可以按您预期的方式工作,但是管理员有点老套,可能并不总是按照您的想法工作。
[通常,fields
根据您的建议指定要显示模型中的哪些字段,并且在大多数情况下都可以使用(只是在这种情况下不行)。