2012-12-11 12 views
1

编辑我重新的问题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

你使用的是Django 1.5吗? –

+0

我认为你需要使用ReadOnlyPasswordHashWidget,因为UserChangeForm在用户模型的admin中,因为密码是加密的。看看django/contrib/auth/forms.py和django/contrib/auth/admin.py。 – sneawo

+0

@Paulo Scardine:不,我正在使用1.4.2。 – jul

回答

1

如果你whant用户输入传递 - 出于传递添加新的领域,并检查它之前提交

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 
+0

我想要密码。 – jul

+0

好吧,我编辑答案 – inoks

+0

'check_pass'字段在管理员中不可见。 – jul

相关问题