【发布时间】: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