首页 > 解决方案 > m2m 字段上的 Django 值与基本模型上的相同查询返回的值不同

问题描述

我期待我没有得到的行为。考虑这个示例模型:

class Node(models.Model):
    name = models.CharField(max_length=30)  # Verbose for readability

class SpecialNode(Node):
   other_attr = models.CharField(max_length=30)

class Edge(models.Model):
    nodes = models.ManyToManyField(Node, related_name="edges")

我有一个给定的节点(不是 Special),我想知道哪些 Edge 没有(或确实)与 SpecialNode 连接。

如果我这样做,工作:

# All the edges except those which have a node that is a SpecialNode
Edge.objects.filter(node__id=1).exclude(nodes__specialnode__isnull=False)

Tho...这不起作用,而是返回节点的所有边缘。

Node.objects.get(id=1).edges.exclude(nodes__specialnode__isnull=False)

我不知道我遗漏了什么或误解了什么,但我希望两个句子都有一个查询集。

标签: djangoinheritancemany-to-manymanyrelatedmanager

解决方案


推荐阅读