为什么我在Django中收到m2m_字段/_ustr_u_u错误?
假设模型是ManyToManyField,下面的查询有效吗?我收到我粘贴在下面的错误,想知道这是因为我的查询错误还是与unicode相关?我应该把Unicode换成字符串吗为什么我在Django中收到m2m_字段/_ustr_u_u错误?,django,unicode,django-models,Django,Unicode,Django Models,假设模型是ManyToManyField,下面的查询有效吗?我收到我粘贴在下面的错误,想知道这是因为我的查询错误还是与unicode相关?我应该把Unicode换成字符串吗 Entry.objects.filter(author__user=username)[:4] models.py class MyProfile(models.Model): user = models.CharField(max_length=16) first_name = models.CharFi
Entry.objects.filter(author__user=username)[:4]
models.py
class MyProfile(models.Model):
user = models.CharField(max_length=16)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __unicode__(self):
return u'%s %s %s' % (self.user, self.firstname, self.lastname)
class Entry(models.Model):
headline= models.CharField(max_length=200,)
body_text = models.TextField()
author=models.ManyToManyField(MyProfile, related_name='entryauthors')
def __str__(self):
return u'%s %s %s' % (self.headline, self.body_text, self.author)
错误
您不能在
\uu str\uu
方法中使用self.author
。它是一个ManyRelatedManager
,而不是您可能期望的作者列表。要获取相关管理器,可以执行self.author.all()
但是,将作者包括在\uuuuu str\uuu
方法中意味着您将在\uuuu str\uu
方法运行时执行额外的数据库查询。我建议你把它去掉
def __str__(self):
return u'%s %s' % (self.headline, self.body_text)
另一方面,我建议您将字段从
作者
重命名为作者
,因为每个条目可以有多个作者。谢谢,这还带来了另一个问题,即每个条目应该只有一个作者,所以我猜我不应该使用多作者字段?如果每个条目都有一个作者,然后用一个.作为旁白-一个型号有\uuuuu str\uuuuu
,另一个型号有\uuuuuuuu unicode\uuuuu
。这些文档建议您为所有模型定义\uuuu str\uuu
,如果您使用的是Python 2,则使用decorator。
def __str__(self):
return u'%s %s %s' % (self.headline, self.body_text, self.author.all())
def __str__(self):
return u'%s %s' % (self.headline, self.body_text)