2016-06-14 72 views
0

複選框有兩種狀態(選中和未選中)。在我看來,我有幾種產品,我試圖根據它的類別進行過濾。當我點擊任何複選框時,複選框狀態正在改變(取消選中)。我也是無法選擇多個複選框。如何在django提交後保留複選框狀態?

Models.py,

class Add_cat(models.Model): 
    category = models.CharField("Name") 
    cat_name = models.BooleanField(default=False) 

我的模板文件,

<head> 
<script type="text/javascript"> 
function myfunction(){ 
    document.getElementById("myform").submit(); 
} 
</script> 
</head> 
<body> 
<form action="{% url 'welcome_user' %}" id="myform"> 
    {% csrf_token %} 
    <p >Categories</p> 
    {% for i in My_Cat %} 

     <input type="checkbox" name="cat_name" value="{{i.category}}" 
     onclick="return myfunction()" 
    {% if add_cat.cat_name %}checked="checked"{% endif %}>{{i.category}}  

    {% endfor %} 
</form> 
</body> 

Views.py,

#Add_prod class contains product list with category as foreign key to Add_cat 
def welcome_user(request): 
    categories = Add_cat.objects.all()  
    if 'cat_name' in request.GET: 
     filter_category = request.GET.getlist('cat_name') 
     my_products = Add_prod.objects.filter(cat__category__in = filter_category) 
     context = { 
       "My_Cat":categories, 
       "products":my_products  
     }  

    if 'cat_name' not in request.GET: 
     my_products = Add_prod.objects.all() 
     context = { 
       "My_Cat":categories, 
       "products":my_products  
     } 
    return render(request,"welcome-user.html",context) 
+0

'add_cat'應該是什麼? – Sayse

+0

它的數據庫名稱 – Bhanukiran

回答

0

您的循環與i迭代,但是,如果使用您的add_cat,將其中一個改爲與另一個相同。

{% for i in My_Cat %} --> {% for add_cat in My_Cat %} 
{% if add_cat.cat_name %} --> {% if i.cat_name %} 
+0

我暫時放棄了這個,但我仍然認爲'if'條件是錯誤的。 – Sayse

+0

我改變了,如果像這樣的條件,{%if i.category%} checked =「checked」{%endif%}現在所有的類別被檢查做什麼? – Bhanukiran

+0

@Bhanukiran - 將'cat_name'更改爲'category'不會有幫助,因爲那樣只會檢查類別是否有任何文本。 – Sayse

0
{% for i in My_Cat %} 

    <input type="checkbox" name="{{i.category}}" value="{{i.category}}" 
     onclick="return myfunction()" 
    {% if add_cat.cat_name %}checked="checked"{% endif %}>{{i.category}}  
{% endfor %} 

您正在使用相同的名稱爲所有的複選框,所以當你改變一個狀態,你就改變你需要使用{{i.cat_name}},而不是cat_name的狀態。這是您點擊一個複選框時更改名稱的原因。

順便說一句,我不知道你的要求,但對我來說,你的屬性的名稱是相當混亂。我會花更多的時間重新考慮屬性的名稱,以避免將來出現更多像這樣的錯誤。