Аз уча Джанго с помощта на Учебен проект за Django, Тъй като използвам python 2.7, не мога да реализирам следното в python 2.7:
from django.db import models
class Question(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.question_text
class Choice(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.choice_text
Отговори:
12 за отговор № 1За да запазим кода съвместим между py2 и py3, по-добър начин е да използваме декоратора python_2_unicode_compatible
, По този начин можете да запазите ул метод:
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Question(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.question_text
@python_2_unicode_compatible
class Choice(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.choice_text
справка: https://docs.djangoproject.com/en/1.8/topics/python3/#str-and-unicode-methods
Django осигурява лесен начин за дефиниране ул() и уникод() методи, които работят на Python 2 и 3: трябва да дефинирате a ул() Методът връща текста и да прилага декоратора python_2_unicode_compatible ().
...
Тази техника е най-подходящата за философията за пренасяне на Django.
6 за отговор № 2
Да, можеш, просто замени __str__
с __unicode__
, както се посочва в коментара:
class Question(models.Model):
# ...
def __unicode__(self):
return self.question_text
class Choice(models.Model):
# ...
def __unicode__(self):
return self.choice_text
По-надолу в този раздел ще намерите малко обяснение:
__str__
или__unicode__?
На Python 3 е лесно, просто използвайте
__str__()
.На Python 2 трябва да дефинирате
__unicode__()
вместо това се връщат unicode стойности. Моделите на Django са по подразбиране__str__()
метод, който извиква__unicode__()
и преобразува резултата в utf-8 чрез тестване. Това означава, чеunicode(p)
ще върне Unicode низ иstr(p)
ще върне тест с символи, кодирани като utf-8. Python прави обратното: обектът има a__unicode__
метод, който извиква__str__
и интерпретира резултата като ASCII чрез тестване. Тази разлика може да създаде объркване.
Най- question_text
и choice_text
атрибутите вече връщат Unicode стойности.