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) で並べ替えられた友人を取得する必要があります。

4

2 に答える 2

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')
于 2012-04-26T11:53:37.320 に答える
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]
于 2012-04-26T11:31:37.750 に答える