2012-04-26 8 views
5

는 모델 :장고 manytomany 자기 관계의 순서는

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


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

은 내가 중간 테이블 ID (PK)의 지시 친구를 얻을 필요가

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

도 시도했다.

답변

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

관련 문제