Come posso prefetch_related oggetti in Django e ordinarli da un campo in una tabella intermediario?Django: prefetch_related risultati ordinati da un campo di un tavolo intermedio
Ecco i modelli con cui sto lavorando:
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)
Dato un nodo, mi piacerebbe precaricare tutti i nodi connessi, in ordine di peso.
Quando uso questa query:
n = Node.objects.prefetch_related('to_node').order_by('edge__weight').get(name='x')
l'order_by non ha alcun effetto.
Edit:
La mia migliore risposta finora
n = Node.objects.get(name='x')
edges = Edge.objects.filter(from_node=n).prefetch_related('to_node').order_by('weight')
Allora, invece di iterazione n.edges
(come preferirei), ho itera edges.to_node
Si sta posizionando l'ordine per clausola sulla tabella dei nodi non sulla tabella dei bordi. Quindi, il risultato menzionato è previsto. –
Infatti, ma come può essere messo sul tavolo di bordo? –