2013-04-20 10 views
19
nicht

Ich habe folgendes in meinem models.pyDjango Tutorial Unicode arbeiten

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 

aber wenn ich

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

Ich habe nicht Umfrage: Was ist los? aber Umfrage: Umfrage Objekt

Irgendwelche Ideen?

Antwort

34

Django 1.5 hat experimentelle Unterstützung für Python 3, aber die Django 1.5 tutorial ist für Python 2.x geschrieben:

Dieses Tutorial für Django geschrieben 1.5 und Python 2.x. Wenn die Django-Version nicht übereinstimmt, können Sie auf das Tutorial für Ihre Version von Django zurückgreifen oder Django auf die neueste Version aktualisieren. Wenn Sie Python 3.x verwenden, beachten Sie, dass Ihr Code möglicherweise von dem des Tutorials abweichen muss und Sie das Tutorial nur dann weiter verwenden sollten, wenn Sie wissen, was Sie mit Python 3.x tun.

In Python 3, sollten Sie eine __str__ Methode anstelle eines __unicode__ Methode definieren. Es gibt einen Dekorateur python_2_unicode_compatible, die Sie Code schreiben hilft, die in Python arbeitet 2 und 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 

Für weitere Informationen der str und Unicode-Methoden Abschnitt in dem Porting to Python 3 docs sehen.

+0

Ich ging zurück ein ganzes Leerzeichen mit 4 Leerzeichen für jede Registerkarte neu gespeichert, startete die Shell ohne Erfolg. Immer noch nicht funktioniert –

+0

Ist es wichtig, welche Version von Python ich verwende? Ich habe 3.2.3 –

+2

Ja, das erklärt es. Das liegt daran, dass Sie Python 3 verwenden. Sehen Sie sich meine aktualisierte Antwort an. – Alasdair