Python __str_uu;返回的非字符串(类型为字节)

Python __str_uu;返回的非字符串(类型为字节),python,django,python-2.x,python-3.x,Python,Django,Python 2.x,Python 3.x,我试图打开我的帖子的视图,但我一直收到错误“str返回的非字符串(类型字节)”。我读到应该使用force_字节,然后使用unicode,但它似乎不起作用。我怎样才能修好它 这就是模型: class Post(models.Model): """ Post """ category = models.ForeignKey(Category, on_delete=models.CASCADE) title = mod

我试图打开我的帖子的视图,但我一直收到错误“str返回的非字符串(类型字节)”。我读到应该使用force_字节,然后使用unicode,但它似乎不起作用。我怎样才能修好它

这就是模型:

class Post(models.Model):
   """ Post
   """
   category = models.ForeignKey(Category, on_delete=models.CASCADE)
   title = models.CharField('Title', max_length=200)
   body = models.TextField('Body')
   reply_to = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, null=True, related_name='child')
   created_at = models.DateTimeField(auto_now_add=True)
   created_by = models.ForeignKey(getattr(settings, 'AUTH_USER_MODEL'),  on_delete=models.CASCADE, related_name='posts')

   def __str__(self):
       return force_bytes('%s' % self.title)

   def __unicode__(self):
       return u'%s' % self.title
我读到我应该使用force_字节,然后使用unicode

我认为你读到的文章可能不准确——或者可能引用了一种旧的unicode风格


\uuu str\uu
方法应返回
字符串
类型。由于您的
标题
已经是一个字符串,这应该是一个不错的选择:

def __str__(self):
     return self.title

\uuuu str\uuu
方法需要返回
str
ing,而不是
bytes
对象。因此,您可以返回
self.title
的值:

class Post(models.Model):
    # …

    def __str__(self):
        return self.title

    def __unicode__(self):
        return self.title
class Post(models.Model):
# …
定义(自我):
返回自己的标题
def ___; unicode(自):
返回自己的标题

话虽如此,但看起来您仍在使用。自2020年1月起不再支持此功能,因此最好开始使用,并相应地升级Django版本。

尝试将强制字节分配给变量并使用.encode()
方法,然后尝试返回。。。希望这个有帮助。

您的
force_bytes
可能会将其转换为
bytes
对象。只需返回
self.title
…如果代码与建议匹配(字符串更改)-这可能意味着您的python 2.7文件已缓存。更改后删除所有缓存文件-@甘油我删除了这些文件,但仍然得到相同的结果error@Glycerine哦,这花了一些时间,但现在它工作了,所以它一定是那样的。非常感谢。他们可能正在阅读Python2开发指南。在Python3中,没有
\uuuuuUnicode\uuuuu
\uuuu str\uuuuu
执行与以前相同的工作,因为
str
现在处理任意unicode,而不仅仅是假定为ASCII的字节。感谢您的回答。但是,我确实尝试过,它返回了相同的错误…如果它们在Python2上,
str
将是
bytes
str
/
force_bytes
这件事是不必要的,而且是错误的-它将返回类似于
“b'…'”
的内容<代码>返回自我。标题可能是正确的选择。谢谢您的回答。这仍然返回相同的错误,但是…@satoru:您确定这是引发错误的类吗?你能编辑这个问题并分享完整的回溯吗?编码用于字符串,解码用于字节,所以编码force_字节的结果不起作用。即使您使用decode(),也相当于拥有一个英语句子,将其翻译成中文,然后再翻译成英文并返回。