我正在开发一个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>
....
有没有人有解决方案?
答案 0 :(得分: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>
您的复选框在取消选中时将无法播放,因为它不会在网址或帖子正文中生成{{ 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 }}=False&{{ form.primal.name }}=True
。在这种情况下,只有后一种情况会发生重要,因此您在选中时会"True"
,而在未选中时会"False"
。