我有一个自定义的用户模型,它继承了AbstractUser。我也希望在管理员创建表单中显示这个自定义模型,但是我只能看到用户名和密码字段,其他字段都没有显示出来。
有趣的是,我在admin.py文件中对这三个字段进行更改时,只有密码字段的帮助文本或标签发生了变化,其他字段仍然没有显示出来。
此外,如果我设置extend UserAdmin并注册它,则会得到一个通用用户的三个字段创建视图,但如果我扩展ModelAdmin,则会得到所有字段,但无法使用密码更新表单,它会显示404错误。
需要注意的是,对象列表中的链接是“用户”,而不是我的模型名“CommonUser”,这可能是由于类元数据导致的。
admin.py代码:
有趣的是,我在admin.py文件中对这三个字段进行更改时,只有密码字段的帮助文本或标签发生了变化,其他字段仍然没有显示出来。
此外,如果我设置extend UserAdmin并注册它,则会得到一个通用用户的三个字段创建视图,但如果我扩展ModelAdmin,则会得到所有字段,但无法使用密码更新表单,它会显示404错误。
需要注意的是,对象列表中的链接是“用户”,而不是我的模型名“CommonUser”,这可能是由于类元数据导致的。
admin.py代码:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from models import CommonUser, Account, Registry
from django import forms
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = CommonUser
class MyUserCreationForm(UserCreationForm):
password = forms.CharField(
label='Password',
max_length = 32,
required=True,
widget=forms.PasswordInput,
)
password2 = forms.CharField(
label='Confirm',
max_length = 32,
required=True,
widget=forms.PasswordInput,
help_text="Make sure they match!",
)
class Meta(UserCreationForm.Meta):
model = CommonUser
fields = ['username', 'password', 'password2', 'email',
'first_name','last_name','address','city','state','zipcode',
'phone1','phone2',]
help_texts = {
'password': 'Must be at least 8 characters.',
}
def clean_username(self):
username = self.cleaned_data['username']
try:
CommonUser.objects.get(username=username)
except CommonUser.DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate_username'])
class MyUserAdmin(UserAdmin):
form = MyUserChangeForm
add_form = MyUserCreationForm
fieldsets = UserAdmin.fieldsets + (
('Personal info', {'fields': ('address', 'phone1',)}),
)
admin.site.register(CommonUser, MyUserAdmin)
(模型文件的片段) model.py
from django.contrib.auth.models import AbstractUser
class CommonUser(AbstractUser):
"User abstraction for carrying general info."
WORK_STATES = (
('FL', 'FL'),
)
address = models.CharField(max_length=50)
city = models.CharField(max_length=30)
state = models.CharField(max_length=2, default='FL', choices=WORK_STATES)
zipcode = models.CharField(max_length=10)
phone1 = models.CharField(max_length=15)
phone2 = models.CharField(max_length=15, null=True)
gets_email_updates = models.BooleanField(default=False)
来源
在Django的管理员界面中扩展新用户表单 为自定义用户模型使用Django auth UserAdmin https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#a-full-example
from django.contrib import admin; admin.site.register(CommonUser)
。 - Mihai Zamfir