2013-04-20 16 views
19

Ho il seguente nel mio models.pyDjango esercitazione unicode che non funziona

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 

ma quando entro

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

non ottengo Sondaggio: Che succede? ma Sondaggio: Poll oggetto

Qualche idea?

risposta

34

Django 1.5 ha il supporto sperimentale per Python 3, ma la Django 1.5 tutorial è scritto per Python 2.x:

Questo tutorial è stato scritto per Django 1.5 e Python 2.x. Se la versione di Django non corrisponde, puoi fare riferimento al tutorial per la tua versione di Django o aggiornare Django alla versione più recente. Se stai usando Python 3.x, tieni presente che il tuo codice potrebbe dover differire da ciò che è presente nel tutorial e dovresti continuare a usare il tutorial solo se sai cosa stai facendo con Python 3.x.

In Python 3, è necessario definire un metodo __str__ anziché un metodo __unicode__. C'è un decoratore python_2_unicode_compatible che vi aiuta a scrivere codice che funziona in Python 2 e 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 

Per ulteriori informazioni vedere i str e unicode metodi sezione nelle Porting to Python 3 docs.

+0

Sono tornato a ridigitare tutto lo spazio bianco con 4 spazi per ogni scheda salvata, riavviata la shell senza successo. Ancora non funziona –

+0

Ha importanza quale versione di Python sto usando? Ho 3.2.3 –

+2

Sì, questo lo spiega. È perché stai usando Python 3. Vedi la mia risposta aggiornata. – Alasdair