Django ManyToMany字段从没有'for'的对象获取所有值

时间:2017-07-07 15:20:16

标签: python django manytomanyfield

是否可以在不使用'for'的情况下从对象获取ManyToMany的值?

models.py

class Citizenship(models.Model):
    name = models.CharField(max_length=100)

    class Meta:
        verbose_name_plural = "Citizenship"

    def __str__(self):
        return self.name

class Anexa(models.Model):
    name = models.CharField(max_length=150, help_text="3")
    citizenship = models.ManyToManyField(Citizenship, help_text="4")

我有一个名为Alex的Anexa对象,我有4个公民身份用于此对象。我正在寻找与此相当的东西:

for citizenships in x.citizenship.all():
    print(citizenships.name)

3 个答案:

答案 0 :(得分:3)

您将获得的最接近的是值列表https://docs.djangoproject.com/en/1.11/ref/models/querysets/#values-list,您仍然需要循环才能单独打印。

x.citizenship.values_list('name', flat=True)

答案 1 :(得分:1)

如果要抽象出循环,可以在模型上创建一个方法:

class Anexa(models.Model):
    def print_citizens_names(self):
        for name in self.citizenship.values_list('name', flat=True):
            print(name)

然后在你的代码库中你可以这样做:

x.print_citizens_names()

答案 2 :(得分:0)

这就是答案:

print(', '.join(x.citizenship.values_list('name', flat=True))