簡體   English   中英

Django中UserCreationForm的Meta Class字段的意義是什么?

[英]What is the significance of fields in Meta Class of UserCreationForm in Django?

我是 Django 菜鳥,我有一個問題,我知道這個美麗社區的人們可以幫助我回答。 在我的 Django 項目中,我創建了一個具有自定義字段“數字”的自定義用戶(使用 AbstractUser)。 自定義用戶 model 名為 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

我已經為此 class 分配了一個自定義 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 一樣

#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 class 中的“字段”元組如何影響創建和更改 forms 的結構? 當我在字段元組中刪除或添加元素時,Django 管理員中的這些 forms 沒有區別。 影響表單結構的是 CustomUserAdmin 中的字段集和 add_fieldsets。 那么forms.py的Meta class中的字段有什么用呢? 它們僅用於信息用途嗎?

我懷疑如果您的CustomerAdmin不是從UserAdmin繼承的,它會按預期工作。 您使用的 ModelAdmin 字段將覆蓋表單上指定的fields

如果您在 admin 之外使用 ModelForms,它也可以按您的預期工作,但 admin 是一種古老的笨拙的東西,可能並不總是按照您的想法工作。

一般來說,這些fields指定 model 中的哪些字段,正如您所建議的那樣,它在大多數情況下都可以工作(只是在這個情況下不行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM