/ / Използване на __str __ () метода в Django на Python 2 - python, django, python-2.7, django-models

Използване на метода __str __ () в Django на Python 2 - python, django, python-2.7, django-models

Аз уча Джанго с помощта на Учебен проект за 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 стойности.