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