Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django admin Add User中的新字段_Python_Django_Django Admin - Fatal编程技术网

Python django admin Add User中的新字段

Python django admin Add User中的新字段,python,django,django-admin,Python,Django,Django Admin,我使用的是Django 1.7.1,在这里我遇到了不应该发生的问题 背景:我正在开发基于AbstractUser的定制用户模型。现在-我有一个额外的领域(用于测试)并计划添加更多。不知何故,我设法使它与DjangoAdmin一起工作,使用UserChangeForm和Meta类 问题:根据Django文档,不需要做更多的事情来查看、编辑我的DjangoAdmin站点中的每个字段并为其添加价值。不幸的是,查看和编辑工作与预期一样,但当DjangoAdmin提到“添加新用户”时,我仍然只看到三个字段

我使用的是Django 1.7.1,在这里我遇到了不应该发生的问题

背景:我正在开发基于AbstractUser的定制用户模型。现在-我有一个额外的领域(用于测试)并计划添加更多。不知何故,我设法使它与DjangoAdmin一起工作,使用UserChangeForm和Meta类

问题:根据Django文档,不需要做更多的事情来查看、编辑我的DjangoAdmin站点中的每个字段并为其添加价值。不幸的是,查看和编辑工作与预期一样,但当DjangoAdmin提到“添加新用户”时,我仍然只看到三个字段:“用户名”、“密码”和“密码确认”

问题:当我通过DjangoAdmin创建新用户时,我应该在哪里编辑/放置一些代码以获得填充更多字段的可能性

结尾:是的,我试过很多谷歌搜索结果(包括尽可能多地使用“Fieldset”、“list_display”、“inline”方法等-我还希望避免使用OneTONE与用户模型的关系。这产生了太多错误,我放弃了它,我不想回到那里。如果有这样的需要,我将提供代码片段


提前感谢您的帮助。

我不确定问题是否与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'    
forms.py

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)

这些文档给出了一个非常深入的自定义用户模型示例,包括一个自定义的
UserCreationForm
,我参考了django文档,所以如果不够清楚,我也尝试过这些解决方案。这里的问题似乎出在行:add\u form=UserCreationForm上。这似乎没有效果,我也找不出原因。Secondly:使用AbstractBaseUser而不是AbstractUser会产生一组全新的错误。那么,您的问题已经得到了回答,就是在这里完成的。如果您在实现它的方式上遇到了问题,那么在没有看到您的代码的情况下,实际上什么都做不了。