如何在Django中預取相關對象並按中間表中的字段排序?Django:根據中間表字段排序的prefetch_related結果
這裏是我的工作模型:
class Node(models.Model):
name = models.CharField(max_length=255)
edges = models.ManyToManyField('self', through='Edge', symmetrical=False)
class Edge(models.Model):
from_node = models.ForeignKey(Node, related_name='from_node')
to_node = models.ForeignKey(Node, related_name='to_node')
weight = models.FloatField(default=0)
給定一個節點,我想預取所有相關節點的重量排序。
當我使用此查詢:
n = Node.objects.prefetch_related('to_node').order_by('edge__weight').get(name='x')
的ORDER_BY沒有效果。
編輯:
我最好的答案至今
n = Node.objects.get(name='x')
edges = Edge.objects.filter(from_node=n).prefetch_related('to_node').order_by('weight')
然後,而不是迭代n.edges
(因爲我喜歡),我重複edges.to_node
您正在將節點表上的order by子句放在邊緣表上。所以,所提到的結果是可以預料的。 – 2013-02-15 23:19:49
確實,但它怎麼能放在邊桌上呢? – 2013-02-15 23:29:26