Django模板if语句判断产品分类不生效问题咨询
问题根因
Product模型的category字段为IntegerField类型,配置choices参数后,数据库中存储的是选项元组对应的整数值,并非页面展示用的分类名称字符串。- 按现有
CATEGORY配置,Champagne对应的存储值是整数4,模板中写的product.category == 'Champagne'是拿整数类型值和字符串做相等判断,条件永远不成立,因此目标按钮区块无法渲染。 - 现有
Models.py、Forms.py代码无逻辑错误,无需修改。
修正方案
以下两种写法都可实现需求,优先推荐第二种可维护性更强的方案:
方案1:直接匹配字段存储的整数值
仅修改模板if判断的对比值即可:
{% if product.category == 4 %} <div class="d-flex flex-column mt-4"> <a class="btn btn-outline-secondary btn-sm" href="{% url 'ElderFlowerReview' product.id %}">Tasting Notes</a> </div> {% endif %}
方案2:匹配分类显示名称(推荐)
Django会为所有配置了choices的模型字段自动生成get_<字段名>_display()方法,调用该方法可直接获取选项对应的可读名称,不需要记忆分类对应的数字映射,后续如果调整分类对应的整数值,也不需要修改模板判断逻辑:
{% if product.get_category_display == 'Champagne' %} <div class="d-flex flex-column mt-4"> <a class="btn btn-outline-secondary btn-sm" href="{% url 'ElderFlowerReview' product.id %}">Tasting Notes</a> </div> {% endif %}
内容的提问来源于stack exchange,提问作者PhilM
相关产品推荐
相关产品推荐

