在Django管理员添加用户的新领域

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

我使用Django 1.7.1,在这里我遇到的问题是shouldn`t真的发生了。

背景:我正在基于AbstractUser定制的用户模型。现在 - 我得有一个附加字段(用于测试),并计划增加更多。不知怎的,我设法使其使用UserChangeForm与元类DjangoAdmin工作。

问题:根据Django的文档没有必要做任何更多的获得可能性看,编辑和在我的DjangoAdmin网站增值各个领域。不幸的是 - 看和编辑工作正常,但是当涉及到“添加新用户”由DjangoAdmin - 我仍然看到只有三个字段:“用户名”,“密码”和“确认密码”。

问:我应该在哪里编辑/把一些代码来获取的可能性,以填补更多的领域,而我真的被DjangoAdmin创建新的用户?

结束:是的 - 我已经尝试了很多谷歌的结果(包括使用“字段集”,“list_display”,“内联”的方法等。由于太多,尽量的 - 我也想避免利用与用户模型OneToOne关系,这产生的我放弃了这么多的错误,我不想回到那里。如果有这样的需求 - 我会提供的代码片段。

感谢您提前帮助。

python django django-admin
1个回答
2
投票

我不知道,如果问题是与特定行订购NewUserAdmin类或别的东西 - haven`t测试过,但我敢肯定,我很接近这个解决方案要早得多。然而,这是我说的是(这是工作,我希望它:)的方式)的确切的事情。我现在可以任意字段容易添加到用户模型,它仍然连接到像会议管理的所有框架功能,等等。更重要的是 - 我不使用AbstractBaseUser也不OneToOne领域,这造成了很多的问题。反正 - 感谢帮助的任何方式。没有你......这一周我不会解决这个问题:d

PS我跳过了所有的进口。 IDE会告诉你,什么是需要。

models.朋友

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'    

forms.朋友

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    

admin.朋友

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)
© www.soinside.com 2019 - 2024. All rights reserved.