在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]
代码的最后一行
返回self.level.code +')'+ self.title [:20]
产生错误:'ManyRelatedManager'对象没有属性'code'。 我使用Python 3.6和Django 2.2.2
答案 0 :(得分:1)
您可以这样做:
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]
有关ManyToMany用法的更多信息,请检查documentation
。