Давайте предположим, что модели выглядят так:
class GraphNode(models.Model):
name = models.CharField(...)
edges = models.ManyToManyField('self', through=Edge,
symmetrical=False)
class Edge(models.Model):
source = models.ForeignKey(GraphNode, ...)
destination = models.ForeignKey(GraphNode, ...)
edge_type = models.CharField(...)
Я бы хотел ответить на такие запросы:
Начиная с узла в node_n, какие все узлы подключенычерез тип ребра "foobar"
Я ожидал, что смогу сказать что-то вроде:
results = GraphNode.objects.filter(source_set==node_n,
edges__edge_type='foobar')
Но этот синтаксис не работает (ребра пропускают сквозную таблицу, поэтомуне является полем 'edge_type').Также не может:
results = GraphNode.objects.filter(edge__source=node_n,
edge__edge_type='foobar')
Если я не удалю объявление поля ManyToMany! , в этот момент работает синтаксис запроса, приведенный выше.
Это ошибка?Есть ли хороший / лучший / лучший способ запроса «дополнительных полей» в таблице ManyToMany через таблицу без использования select_related?