首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在django中将布尔值设置为False

如何在django中将布尔值设置为False
EN

Stack Overflow用户
提问于 2016-01-13 11:01:34
回答 2查看 1.5K关注 0票数 0

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

,这是我的模型

代码语言:javascript
复制
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)

这里如果我的观点

代码语言:javascript
复制
def singlesigner(request):
    context = {}
    if request.method == 'POST':
        createsinglesigner_form = CreateSingleSignerForm(data=request.POST)
        if createsinglesigner_form.is_valid():

            createsinglesigner = createsinglesigner_form.save(commit=False)
            createsinglesigner.firstname = request.POST['firstname']
            createsinglesigner.middlename = request.POST['middlename']
            createsinglesigner.lastname = request.POST['lastname']
            createsinglesigner.displayname = request.POST['displayname']
            createsinglesigner.era = request.POST['era']
            createsinglesigner.category = request.POST['category']
            createsinglesigner.hof = request.POST['hof']
            createsinglesigner.externallink = request.POST['externallink']
            createsinglesigner.loaprice = request.POST['loaprice']
            createsinglesigner.basiccertprice = request.POST['basiccertprice']
            createsinglesigner.appraisalcost = request.POST['appraisalcost']
            createsinglesigner.notability = request.POST['notability']

            createsinglesigner_form.save()
        else:
                print createsinglesigner_form.errors
    else:
        # context['createsinglesigner'] = CreateSingleSigner()
        createsinglesigner_form =CreateSingleSignerForm()

    return render(request, "signer/singlesigner.html", {"createsinglesigner_form":createsinglesigner_form})

这是我的表格

代码语言:javascript
复制
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',)
EN

回答 2

Stack Overflow用户

发布于 2016-01-13 11:05:00

试着改变形式

代码语言:javascript
复制
hof = forms.BooleanField(required=False, help_text = 'hall of fame')

代码语言:javascript
复制
hof = forms.BooleanField(initial=False, required=False, help_text = 'hall of fame')
票数 2
EN

Stack Overflow用户

发布于 2016-01-13 13:15:27

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

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

forms.py:

代码语言:javascript
复制
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保存复选框的未选中状态:

代码语言:javascript
复制
hof = forms.BooleanField(required=True, help_text='Hall of Fame')

hof中为易读性设置models.py的默认值也是很好的做法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34764935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档