我有一个扩展/继承AbstractUser的定制用户模型。我还希望管理员中的用户创建表单匹配,但是由于某些原因,我只能让它显示“用户名”和“密码”字段。没有其他的。
我发现特别有趣的是,我对admin.py中的这3个字段所做的更改反映在创建表单中,但是其他字段从未显示。因此,例如,我可以更改password1的帮助文本或标签,并以表单的形式呈现它,而其他字段则不能。
另外,如果我设置扩展UserAdmin并进行注册(如下代码所示),我将获得普通用户的3字段创建视图,但是如果我扩展ModelAdmin我将获得所有字段,但不能使用密码更新形成。它是404s。
还需要注意的是,对象列表中的链接是“用户”,而不是调用模型时的“ CommonUser”,但这可能是某个地方的类元。
管理员
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
django.contrib.auth.admin中的UserAdmin还将设置“ add_fieldsets”属性,该属性设置要在添加用户视图上显示的字段。由于UserAdmin设置了该字段,因此您需要覆盖它以设置自己的字段。
这是一个例子:
class CustomUserAdmin(UserAdmin): # ...code here... fieldsets = ( (None, {'fields': ('email',)}), (_('Personal info'), {'fields': ('first_name', 'last_name')}), (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), (_('Important dates'), {'fields': ('last_login', 'date_joined')}), ) add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('email', 'first_name', 'last_name', 'password1', 'password2')} ), )
希望这可以帮助!