【问题标题】:django modelform validation get field from db if not if formdjango modelform 验证从 db 获取字段,如果不是,如果表单
【发布时间】:2012-05-13 13:57:22
【问题描述】:

我有一个 Django 模型和来自。

class Settings(models.Model):
    field_1 = models.BooleanField()
    field_2 = models.CharField(max_length = 255)

和形式

class SiteSettingsForm(forms.ModelForm):
    class Meta:
        model = SiteSettings

我有一个 HTML 表单,当布尔值 field_1 的复选框未被选中时,第二个字段 (field_2) 被禁用。

问题是,如果我尝试保存表单,它会说有错误,因为field_2 是空的。

如果field_2 未被禁用且不为空,我希望得到错误,但如果field_2 被禁用,我希望表单从数据库中获取值。

我试过这个:

class SettingsForm(forms.ModelForm):
    class Meta:
        model = Settings

    def __init__(self, *args, **kwargs):
        super(SettingsForm, self).__init__(*args, **kwargs)

    def clean(self):
        field_1 = self.data.get('field_1','')
        if not field_1:   # field_2 is disabled 
            self.data['field_2'] = self.instance.field_2 # so get from db
        super(SettingsForm, self).clean()
        return self.cleaned_data

问题是我得到一个错误:

这个 QueryDict 实例是不可变的

【问题讨论】:

  • 你为什么要把它放到self.data而不是self.cleaned_data?

标签: python django validation django-forms


【解决方案1】:

为它更改你的表单:

class SettingsForm(forms.ModelForm):
    class Meta:
        model = Settings

    def __init__(self, *args, **kwargs):
        super(SettingsForm, self).__init__(*args, **kwargs)

    def clean(self):
        cleaned_data = super(SettingsForm, self).clean()
        field_1 = cleaned_data.get('field_1','')
        if not field_1:   # field_2 is disabled 
            cleaned_data['field_2'] = self.instance.field_2 # so get from db
        self.cleaned_data = cleaned_data
        return self.cleaned_data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多