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

How to iterate through a Django ManyToManyField in a sorted order?

我有以下 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()

现在,当我在 f 上遍历 Bs 时,我得到以下信息:

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

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

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

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

    class Meta:
        ordering = ['name']

相关对象是查询集。所以你可以按你喜欢的任何字段排序:

f.b.order_by('name')