复选框具有两个状态(已检查和未选中)。在我的视图中,我有几个产品,我正在尝试根据其类别进行过滤。当我单击任何复选框时,复选框状态为更改(未经检查)。我也无法选择多个复选框。
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)
您的循环使用i
迭代,但是如果使用add_cat
,请将其中一个更改为与另一个相同。
{% for i in My_Cat %} --> {% for add_cat in My_Cat %}
{% if add_cat.cat_name %} --> {% if i.cat_name %}
{% 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
所需的所有状态。这就是您所有复选框时更改名称时的原因。
顺便说一句,我不知道您的要求,但是对我来说,您的属性名称非常困惑。我会花更多的时间重新考虑属性的名称,以避免将来有更多这样的错误。