Django Tutorial Part 1 Объект 'Опрос' не изменяется - PullRequest
2 голосов
/ 28 декабря 2011

Я новичок в Django с его учебником -часть 1: Напишите свое первое приложение . когда я хочу увидеть свои объекты опроса в оболочке python с помощью этой команды Poll.objects.all(), я вижу [<Poll: Poll object>], однако я изменил свой models.py и добавил

class Poll(models.Model):   
    def __unicode__(self):  
        return self.question  

class Choice(models.Model):    
    def __unicode__(self):       
        return self.choice

но я должен увидеть это:

[<Poll: What's up?>]

В чем проблема?

Ответы [ 8 ]

6 голосов
/ 27 октября 2012

Я боролся с этой же проблемой и пытался все исправить.

Я перезапустил оболочку, перезагрузил sycdb, я даже начал заново с новым проектом, но все еще получил ту же проблему.

Я наконец понял это! это глупо и легко ...

__unicode__ нужно по два подчеркивания на каждой стороне !! так '_'_'unicode'_'_'

У меня было def _unicode_(self), когда должно было быть def __unicode__(self).

Я новичок в django и python, так что, возможно, это известно людям, но это нигде не указано в руководстве, и не очевидно, что есть два подчеркивания!

Надеюсь, что это поможет любому, кто попробовал все .

3 голосов
/ 06 апреля 2013

Была такая же проблема при работе с Windows 7, Python 3.3 и Django 1.5.1. Я решил это, заменив Unicode на str

По какой-то причине моя конфигурация, кажется, не понимает Юникод

Код тогда:

def __str__(self):
    return self.question

и это работает ...

2 голосов
/ 25 ноября 2012

Используйте это:

# Create your models here.
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


class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField()
    def __unicode__(self):
        return self.choice_text
2 голосов
/ 28 декабря 2011

Выйдите из оболочки и снова откройте ее.

1 голос
/ 29 декабря 2011

наконец я нашел свой ответ:

в соответствии с руководством, я добавил этот код в мои models.py:

def was_published_today(self):<br> return self.pub_date.date() == datetime.date.today()

но когда я удаляю этидве строки, я вижу "что случилось?"а не [<Poll: Poll object>] !!Я не знаю, почему это произошло именно так?но это просто сработало!
Я новичок в django и python, но я думаю, что это послужило причиной не определения was_published_today в классе Poll ?!они, вероятно, просто пропустили это ...

0 голосов
/ 28 декабря 2011

Я не знаю конкретно о Django, но оболочка Python вызывает __repr__ для объектов, чтобы отобразить их значение.Попробуйте реализовать этот метод в своем классе и посмотрите, к чему это приведет.

>>> class A:
...     def __str__(self):
...         return 'str'
...     def __repr__(self):
...         return 'repr'
... 
>>> A()
repr
>>> print A()
str
0 голосов
/ 28 декабря 2011

Вы ссылаетесь на поля, которые не существуют в модели. Определив поле вопроса, попробуйте сохранить его.

p = Poll(question="what's up?")
p.save()

теперь выполните запрос снова: -)

0 голосов
/ 28 декабря 2011

Вам нужно перезапустить проект Django, прежде чем появятся изменения. Если вы уже перезапустили его, проверьте наличие устаревших файлов .pyc и удалите их.

...