我期待我没有得到的行为。考虑这个示例模型:
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)
我不知道我遗漏了什么或误解了什么,但我希望两个句子都有一个查询集。