urls tutorial httpresponseredirect examples example python django django-models

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