在django模型的__________________________________
在Django模型的str方法中,我试图引用一个是ManyToManyField的字段在django模型的__________________________________,django,python-3.x,django-models,Django,Python 3.x,Django Models,在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(model
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,您可以这样做:
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])
def __str__(self):
elevel = self.level.all().first()
if elevel:
return elevel.code + ')' + self.title[:20]
return self.title[:20]
因为,您可以使用.all()
访问级别对象
或者,如果只想访问第一个对象,请使用以下命令:
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])
def __str__(self):
elevel = self.level.all().first()
if elevel:
return elevel.code + ')' + self.title[:20]
return self.title[:20]
有关多用途的更多信息,请查看