[英]How to remove a field and set default value for a ModelForm in Django?
我的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。
為什么不在模型本身上聲明is_choice_correct
的默認值?
class Choice(models.Model):
is_choice_correct = models.BooleanField(default=True)
然后,如Exprator所示,從表單中排除該字段。 如果只想在某些情況下將字段包括在表單中,則可以在__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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.