1
我有一個模型,其中一個布爾ModelField依賴於另一個。該模型被配置像這樣:修改Django ModelForm.cleaned_data對保存的模型沒有影響
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
。
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
模型的建立:我都在我看來,處理POST請求,以及內的ModelForm clean
功能,像這樣試着這樣做:
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
模型。我怎麼能這樣做呢?
輝煌,完美的作品。我將它保存在'def clean()'方法中,因此它適用於我的創建和更新視圖而無需重複代碼。感謝幫助!只要SO讓我立刻就會標記爲正確的答案。 – Joseph