强制转换为 Unicode:需要字符串或缓冲区,已找到 UserProfile
coercing to Unicode: need string or buffer, UserProfile found
当我尝试在 Django 1.7 的管理面板中查看文件共享时出现此错误
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)
为什么会出现这个错误?我该如何更正它?
当你为Permission定义__unicode__
方法时,它应该是return str(self.user)
而不是return self.user
。
您的 Permission
对象 returns 转换为 Unicode 时的 UserProfile
对象:
class Permission(models.Model):
user = models.ForeignKey(UserProfile)
def __unicode__(self):
return self.user
__unicode__
method must return a unicode
object, always, instead. You could use the unicode()
type对self.user
提供这样的值:
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 字符以外的任何字符,解码将失败。
当我尝试在 Django 1.7 的管理面板中查看文件共享时出现此错误
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)
为什么会出现这个错误?我该如何更正它?
当你为Permission定义__unicode__
方法时,它应该是return str(self.user)
而不是return self.user
。
您的 Permission
对象 returns 转换为 Unicode 时的 UserProfile
对象:
class Permission(models.Model):
user = models.ForeignKey(UserProfile)
def __unicode__(self):
return self.user
__unicode__
method must return a unicode
object, always, instead. You could use the unicode()
type对self.user
提供这样的值:
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 字符以外的任何字符,解码将失败。