【问题标题】:Django checkbox not being submitted when unchecked未选中时未提交Django复选框
【发布时间】:2016-12-22 04:05:38
【问题描述】:

我正在开发一个 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>
....

有人有解决办法吗?

【问题讨论】:

    标签: python django forms checkbox


    【解决方案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 }}=False&amp;{{ form.primal.name }}=True。在这种情况下,只计算后一个出现次数,因此选中时您将拥有"True",未选中时将拥有"False"

    【讨论】:

    • 我尝试了您的解决方案,但仍然显示错误
    猜你喜欢
    • 2014-06-26
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多