2012-04-26 19 views
5

モデル:ジャンゴ多対多の自己関係の順序は

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


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

私も

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

を試してみました私は、真ん中のテーブルID(PK)が注文した友人を取得する必要があります。

答えて

5

直接中間テーブルを使用していない、とそのもはやクエリセット。

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

または、注文する部分に生のSQLを書き込む必要があります。

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

私が試したときこれは友達のIDでない人物のIDで注文します – kamel

+0

更新された回答を参考にしてください。 –

+0

まだ中間テーブルIDで注文していません – hoju