我在forms.py中有一个ModelForm,如下所示:
class ChoiceForm(forms.ModelForm):
class Meta:
model = Choice
fields = ['choice_text', 'is_choice_correct']
labels = {
'choice_text': "",
'is_choice_correct': ""
}
widgets = {
"choice_text": forms.Textarea(),
"is_choice_correct": "",
}
基于某些条件,我希望is_correct_field
,一个布尔字段不显示在表单中并设置字段的默认值(因为它是必需的),这样当我写form.save()
时在我看来,没有出现错误。
但是,我不想隐藏表单字段。为了更清楚,这就是我想说的。我在表单中仅提交了choice_text
的表单。表单不包含隐藏或显示的字段is_choice_correct
。当我使用form.save()保存表单时,我希望is_choice_correct
为True。
答案 0 :(得分:0)
为什么不在模型本身上声明is_choice_correct
的默认值?
class Choice(models.Model):
is_choice_correct = models.BooleanField(default=True)
然后从Exprator显示的表单中排除字段。
如果您只想在某些条件下在表单中添加字段,则可以在.fields
期间编辑表单__init__
。
class ChoiceForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs) # important, call super() first or the form has no .fields attribute
if my_condition:
self.fields['is_choice_correct'] = Choice._meta.get_field('is_choice_correct').formfield()