如何按排序顺序遍历Django ManyToManyField?

时间:2016-01-29 21:33:43

标签: python django django-models manytomanyfield

我有以下2个Django模型:

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()

现在,当我在Bs上迭代f时,我得到以下内容:

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

如何遍历与B关联的f个对象,使其按字母顺序排列?

2 个答案:

答案 0 :(得分:3)

相关对象是查询集。所以你可以在任何你喜欢的领域订购:

f.b.order_by('name')

答案 1 :(得分:2)

我不知道是否有其他方法,但我通常做的是利用model Meta.ordering之类的:

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

    class Meta:
        ordering = ['name']