[英]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.