You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板中查询ManyToManyField并使用if判断筛选数据

Django模板查询ManyToManyField的解决方案

错误原因

你当前使用的p.Category_id写法仅适用于单值外键(ForeignKey)字段。ManyToManyField对应的是多对多关联的对象集合,不存在单个_id属性,因此原有if判断逻辑无法生效。

实现方案

方案1:模板内直接判断(仅适合少量数据场景)

直接调用多对多字段的过滤方法判断是否存在id为6的分类即可,写法如下:

{% for p in Product %}
      {% if p.Category.filter(id=6).exists %}
         {{p.id}}
       {% endif %}
{% endfor %}

方案2:视图层提前过滤(推荐,性能更好)

Django最佳实践不建议在模板中执行数据库查询,你可以在视图层就把符合要求的产品筛选完成后再传给模板:
视图代码示例:

from .models import Product

def your_view(request):
    # 用双下划线语法查询关联分类id为6的产品
    filtered_products = Product.objects.filter(Category__id=6)
    return render(request, '你的模板路径.html', {'Product': filtered_products})

模板中直接遍历即可,不需要额外判断:

{% for p in Product %}
    {{p.id}}
{% endfor %}

额外建议

模型字段名建议遵循Python命名规范,使用小写开头的蛇形命名(比如把Category改为category),避免和类名产生混淆。

内容的提问来源于stack exchange,提问作者Amin.Sabernezhad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:45:04