2016-06-14 18 views
0

Checkbox hat zwei Zustände (aktiviert und deaktiviert) .In meiner Sicht habe ich mehrere Produkte und ich versuche, es basierend auf seiner Kategorie zu filtern.Wenn ich auf ein beliebiges Kontrollkästchen anklicke, ändert sich der Status des Kontrollkästchens (nicht abgehakt) .Auch ich bin nicht in der Lage, mehrere Kontrollkästchen zu markieren.Wie behält man den Checkbox-Status nach dem Senden in django?

Models.py,

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

Meine Template-Datei,

<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

Was soll 'add_cat' sein? – Sayse

+0

Es ist ein Datenbankname – Bhanukiran

Antwort

0

Ihre for-Schleife ist mit i Iterieren, aber Ihr, wenn verwendet ein add_cat, ändern Sie eine von ihnen, um die gleiche wie die andere zu sein.

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

Ich habe dies vorerst wiederhergestellt, aber ich denke immer noch, dass die "if" Bedingung falsch ist. – Sayse

+0

Ich änderte, wenn Bedingung wie diese, {% if i.category%} checked = "checked" {% endif%} jetzt alle Kategorien überprüft, was zu tun ist? – Bhanukiran

+0

@Bhanukiuran - 'cat_name' in' category' zu ändern wird nicht helfen, da nur überprüft wird, ob die Kategorie einen Text enthält. – 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 %} 

Sie den gleichen Namen für alle Checkbox, so dass, wenn Sie den Zustand eines zu ändern, ändern Sie den Status aller Sie {{i.cat_name}} statt cat_name verwenden müssen. Dies ist der Grund für alle Ihre Kontrollkästchen, den Namen zu ändern, wenn Sie in einen klicken.

Übrigens, ich kenne Ihre Anforderungen nicht, aber für mich ist der Name Ihrer Attribute ziemlich verwirrend. Ich würde mehr Zeit verbringen, um den Namen der Attribute zu überdenken, um weitere Fehler wie diese in der Zukunft zu vermeiden.