2014-05-03 42 views
0

我正在使用django,并且我有一个包含密码字段的模型。在创建一个新模型时,我想显示两个密码字段(一个用于输入,另一个用于验证),但编辑模型时,我只想显示一个只读字段,其中包含密码的哈希码。如何创建和编辑模型有不同的形式

我想要做的就是为User模型做了什么。我查看了代码,但是我还没有找到的User

那么,在哪里看Django代码或如何知道我是否在创建或编辑模式。

这里就是我做:

admin.py

class myModelAdmin(admin.ModelAdmin): 
    form = myModelForm 

admin.site.register(myModel, myModelAdmin) 

form.py

class myModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(myModelForm, self).__init__(*args, **kwargs) 
     instance = getattr(self, 'instance', None) 
     if instance and instance.pk: 
      self.fields['password'].widget.attrs['readonly'] = True 

    class Meta: 
     model = myModel 
     # I commented this otherwise I get password field on editing mode 
     """widgets = { 
     'password': forms.PasswordInput(), 
    }""" 

models.py

class myModel(models.Model): 
    name = models.CharField(max_length=100, primary_key=True) 
    password = models.CharField(_('password'), max_length=128) 

    def save(self, *args, **kwargs): 
     self.set_password(str(self.password)) 
     super(myModel, self).save(*args, **kwargs) 

    def set_password(self, raw_password): 
     self.password = hashlib.sha512(raw_password).hexdigest() 

回答

0

我找到了解决方案,覆盖了ModelAdmin类的get_form方法。

def get_form(self, request, obj=None, **kwargs): 
    defaults = {} 
    if obj is None: 
     return myModelCreationForm 
    defaults.update(kwargs) 
    return super(myModelAdmin, self).get_form(request, obj, **defaults) 

我找到了答案here。我们可以看看here为用户模型的Django解决方案。

相关问题