2016-01-29 23 views
2

我有以下2個Django模型:如何按排序順序遍歷Django ManyToManyField?

from django.db import models 

class B(models.Model): 
    name = models.CharField(null=False, blank=False, max_length=255) 

    def __str__(self): 
     return self.name 


class A(models.Model): 
    name = models.CharField(null=False, blank=False, max_length=255) 
    b = models.ManyToManyField(B, related_name="A_b") 

我創建了以下情況:

p = B.objects.create(name="P") 
q = B.objects.create(name="Q") 
r = B.objects.create(name="R") 
f = A.objects.create(name="F") 
f.add(r) 
f.add(q) 
f.add(p) 
f.save() 

現在,當我重複過Bsf,我得到如下:

>>> [i for i in f.b.iterator()] 
['R', 'Q', 'P'] 

如何迭代與f關聯的B對象,例如它們按字母順序排列?

回答

2

我不知道是否有其他的方法,但我通常做的是採取model Meta.ordering的優勢,如:

class B(CachingMixin, MPTTModel): 
    name = models.CharField(null=False, blank=False, max_length=255) 

    class Meta: 
     ordering = ['name'] 
+1

工作正常!謝謝。我會盡快接受答案。 :) –

3

相關對象的查詢集。所以你可以通過你喜歡的任何領域進行訂購:

f.b.order_by('name') 
+0

順便說一下,我不知道可以直接將對象'f.add(r)'繞過'f.b.add(r)'字段。那是對的嗎?而且我從來沒有見過'.iterator()' – Pynchia