簡體   English   中英

django-admin中的新字段添加用戶

[英]New field in django-admin Add User

我正在使用Django 1.7.1,在這里我遇到了不應該真正發生的問題。

背景:我正在研究基於AbstractUser的定制用戶模型。 現在-我還有一個額外的字段(用於測試),並計划添加更多字段。 我設法通過UserChangeForm和Meta類使其與DjangoAdmin一起使用。

問題:根據Django-docs,無需做任何其他事情就可以查看,編輯DjangoAdmin站點中的每個字段並為其添加值。 不幸的是-查看和編輯工作按預期進行,但是當涉及DjangoAdmin的“添加新用戶”時-我仍然只看到三個字段:“用戶名”,“密碼”和“密碼確認”。

問題:當我由DjangoAdmin創建新用戶時,應該在哪里編輯/編寫一些代碼以填充更多字段?

結束語:是的-我已經嘗試了很多google結果(包括使用“ fieldsets”,“ list_display”,“ inline”方法等。),盡可能地,我-還要避免對用戶模型使用OneToOne關系那產生了很多錯誤,我放棄了,我不想回到那里,如果有這樣的需要,我將提供代碼片段。

預先感謝您的幫助。

我不確定問題是否出在NewUserAdmin類中的特定行順序或其他問題上-尚未進行測試,但是我很確定自己早已接近此解決方案。 但這正是我在談論的事情(它正在按照我想要的方式工作:))。 現在,我可以輕松地將任何字段添加到用戶模型,並且該字段仍連接到所有框架功能,例如會話管理,等等。 而且-我不使用AbstractBaseUser或OneToOne字段,這引起了很多問題。 無論如何-感謝您提供的任何幫助。 沒有你,我不會解決... ...本周:D

PS我跳過了所有進口。 IDE會告訴您,需要什么。

models.py

class NewUserManager(UserManager):
def create_user(self, username, email=None, password=None, **extra_fields):
    return UserManager.create_user(self, username, email=email, password=password, **extra_fields)

def create_superuser(self, username, email, password, **extra_fields):
    return UserManager.create_superuser(self, username, email, password, **extra_fields)

class NewUser(AbstractUser):
    newField = models.CharField()       # for example CharField
    newField = models.CharField(max_length = 12) # important thing - properties should be in the second line
    objects = NewUserManager()

    class Meta(AbstractUser.Meta):
        swappable = 'your_app_name.NewUser'
        #db_table = 'auth_user'    

表格

class NewUserCreationForm(forms.ModelForm):
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)

    class Meta:
        model = NewUser
        fields = ('username', 'email', 'first_name', 'last_name', 'newField')       # few example fields and new one: newField

    def clean_password2(self):
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("Passwords don't match")
        return password2

    def save(self, commit=True):
        user = super(NewUserCreationForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        if commit:
            user.save()
        return user

class NewUserChangeForm(UserChangeForm):
    class Meta(UserChangeForm.Meta):
        model = NewUser
        fields = ('username', 'email', 'first_name', 'last_name', 'newField', 'last_login', 'is_staff')     # few example fields and new one: newField    

管理員

class NewUserAdmin(UserAdmin):
    form = NewUserChangeForm
    add_form = NewUserCreationForm

    list_display = ('username', 'newField', 'first_name', 'last_name', 'last_login',)       # few example fields and new one: newField
    fieldsets = (
        (None, {'fields': ('username', 'email', 'first_name', 'last_name', 'newField', 'last_login', 'is_staff')}), # few example fields and new one: newField
)

    add_fieldsets = (
        (None, {
        'classes': ('wide',),
        'fields': ('username', 'newField', 'password1', 'password2')}   # here are fields you want to have in django-admin AddUser view
    ),           # one of the most important place above
)

admin.site.register(NewUser, NewUserAdmin)

暫無
暫無

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

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