python - tutorial - Modelo Django Poll
httpresponseredirect django example (4)
Estoy trabajando en los tutoriales de Django , y ahora estoy creando una encuesta.
El siguiente código funciona bien hasta que quiera crear opciones, donde por alguna razón siempre recibo este mensaje de error:
line 22, in __unicode__
return self.question
AttributeError: ''Choice'' object has no attribute ''question''
¿Qué estoy haciendo mal?
Aquí está mi código:
import datetime
from django.db import models
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_today(self):
return self.pub_date.date() == datetime.date.today()
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
def __unicode__(self):
return self.question # this is line 22
Debería ser:
def __unicode__(self):
return self.poll.question
Porque la encuesta es un modelo relacionado que contiene la pregunta.
El método __unicode__
en el modelo de Choice
debería verse más o menos así:
def __unicode__(self):
return self.poll.question
question
atributo de question
no existe en el modelo de Choice
, debe alcanzarlo sobre el campo de clave externa de poll
.
No olvides consultar la excelente documentación de Django que muestra muchos ejemplos sobre cómo manejar relaciones de uno a uno .
Editar
Probablemente tenga más sentido return self.choice
en el método Choice
modelo __unicode__
, por lo que genera la elección real, no la pregunta Poll.
def __unicode__(self):
return self.choice
Para dar seguimiento a la respuesta de Rebus, el tutorial en realidad dice agregar retornos diferentes a cada modelo:
class Poll(models.Model):
# ...
def __unicode__(self):
return self.question
class Choice(models.Model):
# ...
def __unicode__(self):
return self.choice
Tuviste ''self.question'' como el retorno para ambos - Estoy pensando que cometiste el mismo error de copiar / pegar que yo, o el tutorial que antes tenía ese error ;-)
Esto se debe a un error de Cerebro humano o a un error de copiar / pegar. Nosotros / Usted pensó que ambas funciones eran las mismas y copió y pegó el mismo código para ambos, pero había una palabra diferente en ambas.
reemplazar question
a choice
en la línea 22