如何按排序顺序遍历 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')
我有以下 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')