2016-01-13 109 views
0

我在窗体中有一个名为'hof'的复选框按钮,如果我单击窗体中的复选框并发送,它可以工作,但是如果我取消选中它拒绝发送,得到是这个字段是必需的。如何在django中设置一个布尔值为False

这里是我的模型

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) 

这里,如果我的看法

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}) 

这里是我的表

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',) 

回答

2

尝试茶NGE形式

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

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

仍然得到需要的复选框 – uche

+0

MultiValueDictKeyError在/签名/ singlesigner/ “ '霍夫'” – uche

+0

尝试视图切换到该字段: 如果createsinglesigner_form.is_valid(): createsinglesigner_form.save() else: print creatinginglesigner_form.errors – zablotski

0

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

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

forms.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的保存复选框的选中状态:

hof = forms.BooleanField(required=True, help_text='Hall of Fame') 

为了易读性,在models.py中设置​​的默认值也是一种很好的做法。

相关问题