当前位置: 首页 > 面试题库 >

Django queryset获取准确的多方查找

周楷
2023-03-14
问题内容

我有一个Tag模型实例的pk列表,例如

pk_list = [10, 6, 3]

我有另一个模型,其中标签的m2m字段和包含3个标签(以上pks)的实例。

class Node(models.Model):
    ...
    tags = models.ManyToManyField(Tag, related_name='nodes')

我想检索一个节点,其中包含我pk_list中指定的确切标签集。当我做

Node.objects.filter(tags__in=pk_list)

它返回三个相同实例的列表

[<Node: My node title>, <Node: My node title>, <Node: My node title>]

显然,调用.get()无效,因为它必须返回一个实例。

那么,如何检索单个实例?我必须注意,如果我的pk_list不同,例如。[10,6]或[10,6,3,7],那么我什么也得不到。我需要完全匹配。


问题答案:

一种方法是使用过滤器链:

node_query = Node.objects.all()
pk_list = [10, 6, 3]

for pk in pk_list:
    node_query = node_query.filter(tags=pk)

现在,node_query将匹配具有至少三个标签为pk 10、6、3的节点。要完全匹配三个标签:

正确的答案是:

from django.db.models import Count

pk_list = [10, 6, 3]
node_query = Node.objects.annotate(count=Count('tags')).filter(count=len(pk_list))

for pk in pk_list:
    node_query = node_query.filter(tags__pk=pk)


 类似资料:
  • 我正在做一个主要使用javascript, css, html5的项目。我需要准确地获取本地时间,无论用户位于哪里,以允许用户在特定日期访问模块。假设。 如何准确获取用户的本地时间? 选项: 1:使用JavaScript获取用户的本地时间并使用它。 问题:用户可以手动更改其系统的日期时间设置,以更改日期并过早访问模块。 2:使用服务器日期时间在特定日期启用模块。 问题:服务器可能位于任何地方,例如

  • 问题内容: 我有不同的表, 目标 是获得每个客户的批准工作流,并以这种方式显示该信息: > 客户| APPROVER1 | APPROVER2 | APPROVER3 | 审批人4 首先,我有一个称为实体的表 注意: 12被分配给数学安德鲁… 308是表示马特·安德鲁是客户的数字 13被分配给John Connor … 308是表示John Connor是CLIENT的数字 由于Math Andr

  • 是否有一种方法可以查看/检查由本机节点模块发送的完整请求头?我正在做某事。像这样: 我想看看是否有任何饼干与这个请求一起发送.

  • 问题内容: 我可以给它加上浮点数,例如 但是它有多精确?如果我给它 它真的会睡约50毫秒吗? 问题答案: time.sleep函数的准确性取决于你底层操作系统的睡眠准确性。对于非实时操作系统(如普通Windows),你可以睡眠的最小间隔约为10-13毫秒。在最小的10-13毫秒以上的时间里,我已经看到了几毫秒内的准确睡眠。 更新:就像在下面引用的文档中提到的那样,通常以循环方式进行睡眠,以确保在早

  • 我希望获得PDF中每个页面的准确大小,作为我将创建的PDF单元测试的一部分。当我处理每个文档中具有许多不同页面大小的PDF时,代码返回一个ArrayList维度。 AFAIK每个页面也可以有自己的DPI设置。 我在谷歌上搜索了很多次,但我只找到了这个答案,这只给了我部分答案,因为我仍然需要计算出每页的DPI。 PDFBox-查找页面维度