如何将 Django 中的布尔值设为 False

2024-04-25 21:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在表单中有一个名为“hof”的复选框按钮,如果我单击表单中的复选框并发送,它可以工作,但是如果我取消选中它拒绝发送,我得到的是这个字段是必需的。在

这是我的模型

class CreateSingleSigner(models.Model):
    firstname = models.CharField(max_length = 32)
    middlename = models.CharField(max_length = 32)
    lastname = models.CharField(max_length = 32)
    displayname = models.CharField(max_length = 32)
    era = models.CharField(max_length = 11)
    category = models.CharField(max_length = 32)
    hof = models.BooleanField()
    externallink = models.CharField(max_length = 70)
    loaprice = models.FloatField(max_length = 10)
    basiccertprice = models.FloatField(max_length = 10)
    appraisalcost = models.FloatField(max_length = 10)
    notability = models.CharField(max_length = 32)

如果我的观点是

^{pr2}$

这是我的表格

class CreateSingleSignerForm(forms.ModelForm):
    firstname = forms.CharField(max_length = 32, required = True, help_text = "firstname")
    middlename = forms.CharField(max_length = 32, required = True, help_text = "middlename")
    lastname = forms.CharField(max_length = 32, required = True, help_text = "lastname")
    displayname = forms.CharField(max_length = 32, required = True, help_text = "displayname")
    era = forms.CharField(max_length = 11, required = True, help_text = "era")
    category = forms.CharField(required = True, help_text = 'category')
    hof = forms.BooleanField(required=False, help_text = 'hall of fame')
    notability = forms.CharField(max_length = 11, required = True, help_text = 'notability')
    externallink = forms.CharField(required = True, help_text = "externallink")
    loaprice = forms.FloatField(required = True, help_text = "loaprice $")
    basiccertprice = forms.FloatField(help_text = "basiccertprice $")
    appraisalcost = forms.FloatField(help_text = "appraisalcost $")

    class Meta:
        model = CreateSingleSigner
        fields = ('firstname',)

Tags: texttruemodelsrequiredhelpformsfirstnamelength
2条回答

您不应该为表单上的BooleanField设置初始值。在

您还使用了一个ModelForm,没有必要在表单中重写模型的逻辑。在

表单.py:

class CreateSingleSignerForm(forms.ModelForm):

    class Meta:
        model = CreateSingleSigner
        fields = (
            'hof',
            ...
        )

    # Instantiate the object and override the required setting on hof field:
    def __init__(self, *args, **kwargs):
        super(CreateSingleSignerForm, self).__init__(*args, **kwargs)
        self.fields['hof'].required = True

如果要坚持代码,则从forms.Form而不是forms.ModelForm继承并指示Django保存复选框的未选中状态:

^{pr2}$

最好在您的models.py中为hof设置一个默认值,以保证可读性。在

试着改变形式

hof = forms.BooleanField(required=False, help_text = 'hall of fame')

^{pr2}$

相关问题 更多 >