繁体   English   中英

强制转换为Unicode:需要字符串或缓冲区,找到UserProfile

[英]coercing to Unicode: need string or buffer, UserProfile found

当我尝试在Django1.7的管理面板中查看FileShare时,出现此错误

coercing to Unicode: need string or buffer, UserProfile found

我的models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User,primary_key=True)
    def __unicode__(self):
        return self.user.username
    User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

class FileDetails(models.Model):
    fileId = models.CharField(max_length = 100,primary_key=True,db_index=True)        
    def __unicode__(self):
        return self.fileId

class Permission(models.Model):
    user = models.ForeignKey(UserProfile)
    def __unicode__(self):
        return self.user

class FileShare(models.Model):
    owner = models.ForeignKey(UserProfile)
    file_requested=models.ForeignKey(FileDetails)
    permission=models.ManyToManyField(Permission)
    def __unicode__(self):
        return str(self.owner)

为什么会出现这个错误? 我该如何纠正?

转换为Unicode时,您的Permission对象返回一个UserProfile对象:

class Permission(models.Model):
    user = models.ForeignKey(UserProfile)
    def __unicode__(self):
        return self.user

__unicode__方法必须始终返回一个unicode对象。 您可以在self.user上使用unicode()类型来提供这样的值:

class Permission(models.Model):
    user = models.ForeignKey(UserProfile)
    def __unicode__(self):
        return unucode(self.user)

您可能希望在FileShare模型中执行相同的操作:

class FileShare(models.Model):
    owner = models.ForeignKey(UserProfile)
    file_requested=models.ForeignKey(FileDetails)
    permission=models.ManyToManyField(Permission)
    def __unicode__(self):
        return unicode(self.owner)

您在这里使用的是str() ,它将导致包含UTF-8字节的字符串,然后必须再次(隐式)对其进行解码。 但是Python将尝试为此使用ASCII编解码器,并且如果所有者用户名包含ASCII字符以外的任何其他内容,则解码将失败。

当为Permission定义__unicode__方法时,它应该是return str(self.user)而不是return self.user

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM