Django ManyToMany 字段从没有 'for' 的对象中获取所有值
Django ManyToMany field get all values from an object without a 'for'
是否可以在不使用 '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)
您将获得的最接近值列表 https://docs.djangoproject.com/en/1.11/ref/models/querysets/#values-list,您仍然需要循环遍历才能单独打印。
x.citizenship.values_list('name', flat=True)
如果您想抽象掉循环,您可以在模型上创建一个方法:
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()
这是答案:
print(', '.join(x.citizenship.values_list('name', flat=True))
是否可以在不使用 '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)
您将获得的最接近值列表 https://docs.djangoproject.com/en/1.11/ref/models/querysets/#values-list,您仍然需要循环遍历才能单独打印。
x.citizenship.values_list('name', flat=True)
如果您想抽象掉循环,您可以在模型上创建一个方法:
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()
这是答案:
print(', '.join(x.citizenship.values_list('name', flat=True))