【发布时间】:2014-04-18 07:22:54
【问题描述】:
我有一个模型,其中一个布尔模型字段依赖于另一个模型。模型配置如下:
class Situation(models.Model):
ctcs = models.BooleanField(verbose_name="Cross-Technology Critical Situation", blank=True)
has_been_ctcs = models.BooleanField(editable=False, default=False)
ctcs 字段在此模型的 ModelForm 中呈现为复选框。我想要做的是,如果ctcs 字段已被选中,我还想将has_been_ctcs 设置为True。所以我正在做的是在 ModelForm 上设置cleaned_data['has_been_ctcs'] = True。我已经尝试在处理 POST 请求的视图中以及在 ModelForm clean 函数中执行此操作,如下所示:
class SituationForm(forms.ModelForm):
def clean(self):
cleaned_data = super(SituationForm, self).clean()
ctcs = cleaned_data.get("ctcs")
if ctcs:
self.cleaned_data['has_been_ctcs'] = True
return cleaned_data
这是处理创建新Situation 模型的视图中的 sn-p:
sit_form = SituationForm(request.POST)
if sit_form.is_valid():
print sit_form.cleaned_data['ctcs'] # Prints True
if sit_form.cleaned_data['ctcs']:
print "Checking form has_been_ctcs"
# Have also tried setting sit_form.cleaned_data['has_been_ctcs'] here, no difference from doing it in `def clean()`
print sit_form.cleaned_data['has_been_ctcs'] # Prints True
sit = sit_form.save()
print sit.has_been_ctcs # Prints False
我似乎无法将 True 的 has_been_ctcs 值传播到 Situation 模型。我该怎么做呢?
【问题讨论】:
标签: django forms django-models django-forms