2012-04-26 13 views
5

Modello:django ManyToMany sé fine rapporto da parte del tavolo centrale id

class Person(models.Model): 
    friends= models.ManyToManyField("self", blank=True, null=True) 


friends = person.friends.order_by('friends__id')[:5] 

ho provato anche

friends = Person.objects.filter(friends=obj).order_by('-friends__id')[:5] 

ho bisogno di ottenere i amici ordinate dalla id tavolo centrale (PK).

risposta

5

Usa tabella intermedia direttamente, e la sua non più un set di query.

friends = [pf.to_person for pf in 
    person.friends.through.objects.filter(from_person=person) 
    .select_related('to_person') 
    .order_by('pk')] 

o avete bisogno di scrivere SQL prime nell'ordinare parte.

person.friends.order_by(person.friends.through._meta.db_table+'.id') 
0

friends = person.friends.order_by('pk')

In [20]: [f.pk for f in p.friends.order_by('-pk')] 
Out[20]: [3, 2] 

In [21]: p.pk 
Out[21]: 1 

In [22]: [f.pk for f in p.friends.order_by('pk')] 
Out[22]: [2, 3] 
+0

Quando ho provato questo gli ordini dalla persona id non amici id – kamel

+0

Vedere aggiornato risposta con un esempio. –

+0

Ancora non ordina dall'ID della tabella centrale – hoju

Problemi correlati