django - 多对多字段的Django过滤器不起作用
问题描述
有一个文章模型,它有多对多的类别字段。我想按该字段过滤它,但它不像我预期的那样工作。例如:
MyModel.objects.filter(categories__id__in = [0, 1, 2])
即使它没有 id 为 2 的类别,它也会获得类别为 0 和 1 的模型。我尝试过这样的事情:
MyModel.objects.filter(Q(categories__id = 0) & Q(categories__id = 1) & Q(categories__id = 2))
但它甚至不起作用。如果它具有所有这些类别,它甚至不会获得模型。
顺便说一句,我不想使用超过 1 种过滤方法
那么,有什么适合我的解决方案吗?
谢谢。
PS:django AND on Q 对多对多不起作用——同样的问题,但作者仍然没有得到答案。
解决方案
您可以计算它是否匹配三个Category
s,因此只检索三个匹配的项目:
from django.db.models import Count
MyModel.objects.filter(
categories__id__in=[0, 1, 2]
).annotate(
category_count=Count('categories')
).filter(category_count=3)
推荐阅读
- mysql - Mysql 存储过程的空输出
- c++ - 如何调用另一个cpp文件中定义的默认构造函数
- flutter - Flutter:一一删除每个保存的共享首选项
- python - 我正在使用 UDP PYTHON 进行套接字编程,如何保存连接到服务器的客户端,将该客户端添加到列表中?
- powershell - 在 Powershell 中,我在处理超过 1gb 的文件时收到“OutOfMemoryException”
- javascript - 如果选中复选框,如何制作所需的烧瓶表单部分
- c# - 检查文本框是否包含数字和字符串
- sql - 查找过去两年内另一个表中没有新引用的所有条目
- google-apps-script - 即使用户存在于使用谷歌脚本的谷歌群组中,如何继续运行脚本?
- python - 如何隔离 JSON 输入意外结束的原因