2016-08-15 22 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

相關問題