簡體   English   中英

如何在Django中刪除字段並為ModelForm設置默認值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM