2016-06-14 159 views
0

チェックボックスには2つの状態(チェックされているかチェックされていない状態)があります。私の見解ではいくつかの製品があり、カテゴリに基づいてフィルタリングしようとしています。チェックボックスをクリックするとチェックボックスの状態が変化します。複数のチェックボックスを選択できません。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

あなたは、forループ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 %} 

あなたは1の状態を変更するときに、あなたが{{i.cat_name}}代わりのcat_nameを使用するために必要なすべての状態を変更、すべてのチェックボックスに同じ名前を使用しています。これは、すべてのチェックボックスがクリックされたときに名前を変更する理由です。

Btw、あなたの要件はわかりませんが、私にとってあなたの属性の名前はかなり混乱しています。私は将来のこのような多くのエラーを避けるために、属性の名前を再考するのにもっと時間を費やすだろう。

関連する問題