【问题标题】:How to retain checkbox state after submit in django?在django中提交后如何保留复选框状态?
【发布时间】:2016-06-14 07:53:37
【问题描述】:

复选框有两种状态(选中和未选中)。在我看来,我有几个产品,我正在尝试根据其类别对其进行过滤。当我单击任何复选框时,复选框状态正在更改(未选中)。另外我我无法选择多个复选框。

模型.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)

【问题讨论】:

  • add_cat 应该是什么?
  • 它是一个数据库名称

标签: python django django-templates


【解决方案1】:

您的 for 循环使用 i 进行迭代,但您的 if 使用 add_cat,请将其中一个更改为与另一个相同。

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

【讨论】:

  • 我暂时取消了这个,但我还是觉得if这个条件不对。
  • 我改变了 if 条件这样,{% if i.category %}checked="checked"{% endif %} 现在所有的类别都被检查了怎么办?
  • @Bhanukiran - 将 cat_name 更改为 category 无济于事,因为这只会检查类别是否有任何文本。
【解决方案2】:
{% 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 来更改所有复选框的状态。这就是当您单击一个复选框时所有复选框都会更改名称的原因。

顺便说一句,我不知道你的要求,但对我来说,你的属性名称很混乱。我会花更多时间重新考虑属性的名称,以避免将来出现更多类似这样的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多