2016-08-15 20 views
0

我正在开发一个django应用程序。以我的形式。我的表单中有一个复选框。当表格被选中时,我的表格会提交罚款,但是当这个表格未被选中时,表格将无法提交。我正在使用的字段是布尔值。未选中时未提交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> 
.... 

有没有人有办法解决吗?

回答

1

这不是关于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> 

你的复选框,选中时,不会飞,因为它不会使在URL或交的身体{{ form.primal.name }}=True

要解决您的问题,您应该确保一种方法将{{ form.primal.name }}=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> 

如果复选框未被选中,或者如果{{ form.primal.name }}=False&{{ form.primal.name }}=True复选框被选中这将产生一个查询字符串部分等{{ form.primal.name }}=False。在这种情况下,只有后者出现计数,因此您在选中时将会有"True",而在未选中时将会有"False"

+0

我试过你的解决方案,但它仍然显示错误 – Elisha512

相关问题