如何删除字段并设置Django中Modelform的默认值



我的形式中有一个模态。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()

最新更新