我有一个模型,其中一个布尔型ModelField依赖于另一个。模型配置如下:
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
模型的创建:
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
我似乎无法将has_been_ctcs
值传递给Situation
模型。我该怎么做呢?
答案 0 :(得分:3)
cleaned_data
仅适用于表单中包含的字段。你想要做的是:
sit_form = SituationForm(request.POST)
if sit_form.is_valid():
if sit_form.cleand_data['ctcs']:
sit_form.instance.has_been_ctcs = True
sit = sit_form.save()