如何在Django中删除字段并为ModelForm设置默认值?

时间:2018-02-07 04:33:43

标签: python django django-forms

我在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。

1 个答案:

答案 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()