编辑我重新阐述了问题here
我想创建几个扩展django.contrib.auth.models.User
的自定义用户模型,具有以下功能:
某些特定字段
一个不错的管理员,即每个模型,我可以轻松自定义的管理表单(例如,显示/隐藏来自父django.contrib.auth.models.User
和子模型的一些字段)。
我几乎设法使用下面的代码,但我仍有一个问题:每次我想从管理员修改MyUser1或MyUser2的实例时,密码都会被清除。
这是最好的方法吗?如果是这样,我该如何修复此清除密码问题?
models.py
from django.db import models
from django.contrib.auth.models import User
class MyUser1(User):
#add more fields specific to MyUser1
class MyUser2(User):
#add more fields specific to MyUser2
admin.py
class MyUser1AdminForm(forms.ModelForm):
class Meta:
model = MyUser1
def __init__(self, *args, **kwargs):
super(MyUser1AdminForm, self).__init__(*args, **kwargs)
self.fields['password'].widget = forms.PasswordInput()
def save(self, commit=True):
user = super(MyUser1AdminForm, self).save(commit=False)
user.set_password(self.cleaned_data["password"])
if commit:
user.save()
return user
class MyUser1Admin(admin.ModelAdmin):
form = MyUser1AdminForm
admin.site.register(MyUser1, MyUser1Admin)
# same for MyUser2
答案 0 :(得分:1)
如果您希望用户输入pass - 添加新字段以进行传递并在提交之前进行检查
class MyUser1AdminForm(forms.ModelForm):
check_pass = forms.CharField(label="Password",widget = forms.PasswordInput(), required=True)
class Meta:
model = MyUser1
exclude = ('password',)
def save(self, commit=True):
user = super(MyUser1AdminForm, self).save(commit=False)
if commit and user.check_password(self.cleaned_data["check_pass"]):
user.save()
return user