Django значения по полю m2m не возвращают то же самое, что и тот же запрос на базовой модели
Я ожидаю поведения, которого не получаю. Рассмотрим этот пример модели:
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")
У меня есть заданный узел (который не является Специальным), и я хочу узнать, какие грани не соединяются (или соединяются) со Специальным узлом.
Если я делаю это, работает:
# All the edges except those which have a node that is a SpecialNode
Edge.objects.filter(node__id=1).exclude(nodes__specialnode__isnull=False)
То... это не работает, вместо этого возвращаются все ребра узла.
Node.objects.get(id=1).edges.exclude(nodes__specialnode__isnull=False)
Я не знаю, что я упускаю или неправильно понимаю, но я ожидаю кверисет ребер с обоими предложениями.