型号:
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)订购朋友。
答案 0 :(得分: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')
答案 1 :(得分: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]