2016-06-15 3 views
1

파이썬 2.7과 장고 1.9.7을 사용하고 있습니다. models.py에 문자열 메서드를 추가하려고하는데 오류가 발생합니다. "python manage.py runserver"를 실행하면 다음과 같이 표시됩니다.python_2_unicode_compatible 오류; 파이썬 2.7, django 1.9

ValueError : @ python_2_unicode_compatible은 __ str __()을 정의하지 않았기 때문에 언어에 적용 할 수 없습니다.

from django.db import models 
from django.utils.encoding import python_2_unicode_compatible 

@python_2_unicode_compatible 
class Languages(models.Model): 
    langid = models.AutoField(db_column='LangID', primary_key=True) 
    lname = models.CharField(db_column='lName', max_length=50, blank=True, null=True) 

    class Meta: 
     db_table = 'languages' 

    def __str__(self): 
     return self.lname 

이가 다음과 같은 질문과 매우 유사합니다 : python_2_unicode_compatible error

그러나 문제는 장고 새로운 충분한 버전이 아닌 것을 있었다. 분명히 여기에 뭔가 다른 점이 있습니다. 문제가 무엇인지에 대한 아이디어가 있습니까?

+0

내 스 니펫이 컴퓨터에서 정상적으로 작동합니다. 어쩌면 빈 줄 대신 4 칸을 사용하여 시도해보십시오. (lname과 class Meta 사이, __str__의 정의 앞에) – Ringil

+0

@Ringil 감사합니다.하지만 들여 쓰기 문제는 아닙니다. – Addie

답변

1

당신이 그럼 당신은 내장에 - 'STR'방법을 통해-타고있다

def __str__(self): 
     return self.lname 

을 쓰고있다. str을 사용할 때마다 내장 메서드 대신 정의 된 메서드가 호출됩니다. 당신이 당신이 원하는 모든 모델 "언어"의 대상의 "LNAME"를 반환하는 경우

그래서, 당신은이

def lang_name(self): 
     return u'%s' % self.lname 

이 유처럼 데프의 다른 이름을 사용할 수 있습니다 '% s'는 유니 코드의 문제를 문자열로 해결합니다. 당신이 데프의 다른 이름을 사용하지만 내장 'STR'기능을 대체하려면하지 않으려면

지금, 다음, 아래 당신을 위해 작동합니다 :

def __str__(self): 
     return u'%s' % self.lname 

비록, 기본적으로 Django 모델에는 객체의 기본값을 반환하는 다음과 같은 함수가 있습니다.

def __unicode__(self): 
     return u'%s' % self.lname 
+0

고마워, 내게 오류가 발생합니다 : "TypeError : '클래스 메타'잘못된 속성 (들) : lang_name". 또한 Django 공식 튜토리얼 문서는 def __ str __ (self)에 대한 원래 코드를 제공합니다. return self.lname https://docs.djangoproject.com/en/1.9/intro/tutorial02/ – Addie

+0

def lang_name (self) : 필요 해당 모델의 객체의 속성이므로 Meta 클래스가 아닌 모델에서 정의 할 수 있습니다. Meta 클래스에서 객체의 표현 (예 :> 순서화, verbose_name 등)을 정의하고 객체의 새 속성을 결정하는 위치는 정의하지 않습니다. 보기 -> http://stackoverflow.com/questions/26564001/class-meta-got-invalid-attributes 사용할 수있는 미리 정의 된 메타 옵션이 있습니다 -> https://docs.djangoproject.com/en/dev/ref/models/options/ –

0

간단히 서버를 다시 시작하여이 문제를 해결했습니다.

Ctrl+C 

및 그 이후;

python manage.py runserver