如何使用不同的表单来创建和编辑模型

时间:2014-05-03 08:47:30

标签: python django

我正在使用django,我有一个包含密码字段的模型。在创建新模型时,我想显示两个密码字段(一个用于键入,另一个用于验证),但在编辑模型时,我想只显示一个包含密码哈希码的只读字段。

我想要做的就是为User模型做了什么。我查看了代码,但我找不到ModelForm的{​​{1}}。

那么在哪里查看django代码或如何知道我是否处于创建或编辑模式。

这就是我所做的:

admin.py

User

form.py

class myModelAdmin(admin.ModelAdmin):
    form = myModelForm

admin.site.register(myModel, myModelAdmin)

models.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(),
    }"""

1 个答案:

答案 0 :(得分: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解决方案。