2015-01-17 7 views
0

내가이 오류는 유니 코드로 강요 : 필요 문자열 또는 버퍼, USERPROFILE 내가 Django1.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) 

왜이 오류가 발생 했습니까? 어떻게 해결할 수 있습니까?

답변

0

권한에 대해 __unicode__ 메서드를 정의하면 return self.user 대신 return str(self.user)이되어야합니다. __unicode__ method 대신, 항상하는 unicode 객체를 반환해야합니다

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

: 유니 코드로 변환 할 때

+0

효과가있었습니다. 감사 :) –

1

귀하의 Permission 객체는 UserProfile 개체를 반환합니다. 에 어떤 결과 것,

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()을 사용하고 있습니다 : 당신은 아마 당신의 FileShare 모델에서 동일한 작업을 수행 할

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

: 당신은 같은 값을 제공하기 위해 self.userunicode() type을 사용할 수 있습니다 대신에 UTF-8 바이트이 포함 된 문자열을 다시 암시 적으로 디코딩해야합니다. 그러나 파이썬은 ASCII 코덱을 사용하려고 시도 할 것이고, 소유자 사용자 이름에 ASCII 문자 이외의 것이 있으면 디코딩이 실패합니다.