2012-04-26 29 views
5

mẫu:django manytomany tự để mối quan hệ của id bảng giữa

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


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

Tôi cũng đã cố gắng

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

tôi cần để có được những người bạn ra lệnh bằng id bảng giữa (pk).

Trả lời

5

Sử dụng bảng trung gian trực tiếp, và nó không còn là một queryset.

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

Hoặc bạn cần viết SQL thô theo thứ tự một phần.

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

Khi tôi đã thử This It đặt hàng theo id người không phải là id bạn bè – kamel

+0

Xem câu trả lời được cập nhật với ví dụ. –

+0

Vẫn không đặt hàng bởi id bảng ở giữa – hoju

Các vấn đề liên quan