Lar*_*ell 3 django django-admin
我想在用户admin添加和更改页面中创建所需的电子邮件字段.我读过这篇文章:Django用户模型电子邮件字段:如何使其成为强制性的,我这样做了:
class MyUserCreationForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super(MyUserCreationForm, self).__init__(*args, **kwargs)
# make user email field required
self.fields['email'].required = True
class UserAdmin(BaseUserAdmin):
form = MyUserCreationForm
add_form = MyUserCreationForm
add_fieldsets = ((None, {'fields': ('username', 'email',
'password1', 'password2'), 'classes': ('wide',)}),)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)
这在添加用户时工作正常,但在更改用户时,我得到密码字段中显示的用户加密密码,而不是您通常看到的:
algorithm: pbkdf2_sha256 iterations: 24000 salt: ****** hash:
**************************************
Raw passwords are not stored, so there is no way to see this user's
password, but you can change the password using this form.
Run Code Online (Sandbox Code Playgroud)
当我尝试从更改屏幕保存时,它会显示"请更正以下错误".即使没有显示错误.
如何在更改表单中修复这些问题?
tri*_*ixn 12
该UserAdmin使用UserChangeForm,因为它的form属性和UserCreationForm它的add_form属性.但是你已经使用派生的类覆盖了它们,UserCreationForm对于创建视图是可以的,但是对于更新视图不起作用.
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.models import User
class EmailRequiredMixin(object):
def __init__(self, *args, **kwargs):
super(EmailRequiredMixin, self).__init__(*args, **kwargs)
# make user email field required
self.fields['email'].required = True
class MyUserCreationForm(EmailRequiredMixin, UserCreationForm):
pass
class MyUserChangeForm(EmailRequiredMixin, UserChangeForm):
pass
class EmailRequiredUserAdmin(UserAdmin):
form = MyUserChangeForm
add_form = MyUserCreationForm
add_fieldsets = ((None, {
'fields': ('username', 'email', 'password1', 'password2'),
'classes': ('wide',)
}),)
admin.site.unregister(User)
admin.site.register(User, EmailRequiredUserAdmin)
Run Code Online (Sandbox Code Playgroud)
这应该可以解决问题.
| 归档时间: |
|
| 查看次数: |
2538 次 |
| 最近记录: |