2016-01-29 94 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