2013-04-20 5 views
19

У меня есть следующий в моем models.pyDjango учебник юникод не работает

import datetime 
from django.utils import timezone 
from django.db import models 

# Create your models here. 
class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

    def __unicode__(self): 
     return self.question 

    def was_published_recently(self): 
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 

class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 

    def __unicode__(self): 
     return self.choice_text 

, но когда я вхожу

from polls.models import Poll, Choice 
Poll.objects.all() 

Я не получаю Опрос: Что это? , но Опрос: Объект опроса

Любые идеи?

ответ

34

Django 1.5 имеет экспериментальную поддержку Python 3, но Django 1.5 tutorial написана для Python 2.X:

Этот учебник написан для Django 1.5 и Python 2.x. Если версия Django не соответствует, вы можете обратиться к учебнику для своей версии Django или обновить Django до последней версии. Если вы используете Python 3.x, имейте в виду, что ваш код может отличаться от того, что находится в учебнике, и вы должны продолжать использовать этот учебник, только если знаете, что делаете с Python 3.x.

В Python 3, вы должны определить __str__ метод вместо метода __unicode__. Существует декоратор python_2_unicode_compatible, который поможет вам написать код, который работает в Python 2 и 3.

from __future__ import unicode_literals 
from django.utils.encoding import python_2_unicode_compatible 

@python_2_unicode_compatible 
class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

    def __str__(self): 
     return self.question 

Для получения дополнительной информации см ул Юникод Методы раздела в Porting to Python 3 документации.

+0

Я вернулся обратно на все пустое пространство с 4 местами для каждой вкладки с сохранением, перезапустил оболочку безрезультатно. Все еще не работает –

+0

Неважно, какую версию python я использую? У меня есть 3.2.3 –

+2

Да, это объясняет. Это потому, что вы используете Python 3. См. Мой обновленный ответ. – Alasdair