为什么我在Django中收到m2m_字段/_ustr_u_u错误?

为什么我在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

假设模型是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.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)