我的形式中有一个模态。py如下:
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
是正确的。
为什么不在模型本身上声明 is_choice_correct
的默认值?
class Choice(models.Model):
is_choice_correct = models.BooleanField(default=True)
然后如驱动器所示,将字段从形式中排除。如果仅在某些条件下仅在表格上包含字段,则可以在__init__
期间编辑表格的.fields
。
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()