如何在 Django 中预取相关对象并按中间表中的字段对它们进行排序?
这是我正在使用的模型:
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