Python 未选中Django复选框时未提交

Python 未选中Django复选框时未提交,python,django,forms,checkbox,Python,Django,Forms,Checkbox,我正在开发一个django应用程序。以我的形式。我的表格中有一个复选框。选中该框时,我的表单可以正常提交,但如果未选中该框,则表单无法提交。我使用的字段是布尔值 这是我的密码: #models.py class Ingredient(models.Model): user = models.ForeignKey('auth.User') recipe_id = models.ForeignKey(Recipe, on_delete=models.CASCADE) tit

我正在开发一个django应用程序。以我的形式。我的表格中有一个复选框。选中该框时,我的表单可以正常提交,但如果未选中该框,则表单无法提交。我使用的字段是布尔值

这是我的密码:

#models.py

class Ingredient(models.Model):
    user = models.ForeignKey('auth.User')
    recipe_id = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    title = models.CharField(max_length=500)
    instructions = models.CharField(max_length=500)
    rules = models.TextField(max_length=500,blank=True)
    primal = models.CharField(default='False',max_length=500)
    def __str__(self):
        return self.title

#views.py

def create_ingredient(request):
    form = IngredientForm(current_user=request.user)
    if request.method == 'POST':
           form = IngredientForm(request.POST, current_user=request.user)
           if form.is_valid():
               current_user = request.user
               data = form.cleaned_data
               ingredient_data=Ingredient.objects.create(user=current_user, recipe_id=data['recipe_id'], title=data['title'], primal=data['primal'], instructions=data['instructions'], rules=data['rules'])
               ingredient_data.save()
               ingredient = Ingredient.objects.get(pk = ingredient_data.pk)
               return redirect('ingredient_detail', pk=ingredient.pk)
           else:
               messages.error(request, "Error")
    return render(request, 'create_ingredient.html', {'form': form })


#in my template
....
<div class="form-group">
<div class="checkbox">
      <label><input type="checkbox" name="{{ form.primal.name }}" value="True" id="primal1">Primal</label>
</div>
</div>
....
#models.py
类别成分(型号.型号):
user=models.ForeignKey('auth.user'))
配方id=models.ForeignKey(配方,on\u delete=models.CASCADE)
title=models.CharField(最大长度=500)
说明=型号.CharField(最大长度=500)
规则=模型.TextField(最大长度=500,空白=True)
primal=models.CharField(默认值为False),最大长度为500
定义(自我):
返回自己的标题
#views.py
def创建_成分(请求):
form=IngredientForm(当前用户=request.user)
如果request.method==“POST”:
form=IngredientForm(request.POST,当前用户=request.user)
如果form.is_有效():
当前用户=request.user
data=表格.U数据
配料数据=配料.objects.create(用户=当前用户,配方id=数据['recipe\u id'],标题=数据['title'],原始=数据['primal'],指令=数据['instructions'],规则=数据['rules'])
数据保存()
配料=配料.objects.get(pk=component\u data.pk)
返回重定向('component_detail',pk=component.pk)
其他:
messages.error(请求“error”)
返回呈现(请求'create_component.html',{'form':form})
#在我的模板中
....
原始的
....

有人有解决方案吗?

这不是关于django的,而是关于html的。这是您的模板:

<div class="form-group">
    <div class="checkbox">
        <label><input type="checkbox" name="{{ form.primal.name }}" value="True" id="primal1">Primal</label>
    </div>
</div>

如果复选框未选中,将生成一个查询字符串部分,如
{{form.primal.name}}=False
,如果复选框未选中,则生成
{{form.primal.name}}=False&{form.primal.name}=True
。在这种情况下,只有后一种情况才算数,因此选中时为
“True”
,未选中时为
“False”

我尝试了您的解决方案,但仍然显示错误
<div class="form-group">
    <div class="checkbox">
        <input type="hidden" name="{{ form.primal.name }}" value="False" />
        <label><input type="checkbox" name="{{ form.primal.name }}" value="True" id="primal1">Primal</label>
    </div>
</div>