django - 在 Django 模型的 __str__ 方法中引用 ManyToManyField
问题描述
在 Django 模型的str方法中,我试图引用一个 ManyToManyField 字段。
class Level(models.Model):
code = models.CharField(max_length=10)
name = models.CharField(max_length=60)
def __str__(self):
return self.code
class Excercise(models.Model):
title = models.CharField(max_length=100, unique=True)
level = models.ManyToManyField(Level)
def __str__(self):
return self.level.code + ') ' + self.title[:20]
代码的最后一行
return self.level.code + ') ' + self.title[:20]
产生错误:“ManyRelatedManager”对象没有属性“代码”。我使用 Python 3.6 和 Django 2.2.2
解决方案
你可以这样做:
class Excercise(models.Model):
title = models.CharField(max_length=100, unique=True)
level = models.ManyToManyField(Level)
def __str__(self):
return '({}) {}'.format(', '.join(self.level.all().values_list('code', flat=True)), self.title[:20])
因为,您可以使用.all()
.
或者,如果您只想访问第一个对象,请像这样使用:
def __str__(self):
elevel = self.level.all().first()
if elevel:
return elevel.code + ')' + self.title[:20]
return self.title[:20]
有关多对多用法的更多信息,请查看documentation
.
推荐阅读
- javascript - 加载下拉值字母顺序角度6
- python - 模块“cv2.cv2”没有属性“xfeatures”
- javascript - 如何在 react-redux 中使用 thunk 中间件实现 post api 调用?
- haskell - 在 Haskell 中将数字读取为文本、tshow 和显示
- node.js - 错误:连接处于关闭状态时无法添加新命令
- php - 在 ACF 转发器字段的“While”之后显示值
- ios - 如何创建一个精度为 0.1 秒的计时器?
- r - R 堆积条形图
- ssl - 如何修复“javax.net.ssl.SSLHandshakeException:链验证失败”
- symfony - Symfony 4重定向循环以登录表单多个角色