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)

Я не знаю, что я упускаю или неправильно понимаю, но я ожидаю кверисет ребер с обоими предложениями.

Вернуться на верх