2011-12-28 2 views
2

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

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

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

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

[<Poll: What's up?>] 

Что проблема?

+0

Кажется, ваши модели не были перезагружены в оболочке –

+0

, так что я должен делать? – sheshkovsky

+0

Просто откройте свою раковину –

ответ

1

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

по обучающей программе, я добавил этот код на models.py:

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

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

0

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

+0

все еще без изменений :( – sheshkovsky

+0

Я удалил все .pyc в моем проекте и приложении, было ли это достаточно? – sheshkovsky

2

Выход из корпуса и его повторное открытие.

+0

он не вносит никаких изменений. – sheshkovsky

0

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

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

Теперь запустите запрос снова :-)

+0

Я сделал это раньше, чтобы показать [<Опрос: объект опроса>]! если только это не будет показано только []! – sheshkovsky

+0

Ваш запрос django для ссылки на экземпляр с self.question. Поле вопроса не существует. Итак, продолжайте и создайте полевой вопрос. –

+0

@Feisal Adur: если бы поля не существовало, было бы возбуждено исключение. Очевидно, что '__unicode__' вообще не вызван. –

0

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

>>> class A: 
...  def __str__(self): 
...   return 'str' 
...  def __repr__(self): 
...   return 'repr' 
... 
>>> A() 
repr 
>>> print A() 
str 
6

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

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

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

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

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

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

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

+0

Наконец-то нашел ответ, который помогает. благодаря – Ambidextrous

2

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

# 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 
3

Если бы та же проблема работы с Windows 7, Python 3.3 и Django 1.5.1. Я решил, заменив Юникода по ул

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

Код затем:

def __str__(self): 
    return self.question 

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

Смежные вопросы