Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2013 03:30:39

wiygn
Зарегистрирован: 2012-08-19
Сообщения: 52
Репутация: +  2  -
Профиль   Отправить e-mail  

__unicode__ разбираемся раз и навсегда

Здравствуйте, минут 40 листал результаты поисковой выдачи по __unicode__, но так и не смог решить проблему. У меня python 3.2

Итак, models.py

class Post(models.Model):
	heading = models.CharField("Заголовок", max_length=200)
	content = models.TextField("Содержание", max_length=2000)
	def __unicode__(self):
		return self.heading

Добавляем через консоль или через админку пост. Далее назревает проблема:
в консоли
E:\mysite\mysite>manage.py shell
>>> from blog.models import Post
>>> Post.objects.all()
[<Post: Post object>, <Post: Post object>]
>>>
Я, возможно, чего-то не понял во фразе из туториала:
It’s important to add __unicode__() methods to your models, not only for your own sanity when dealing with the interactive prompt, but also because objects’ representations are used throughout Django’s automatically-generated admin.,
но никаких дополнительных манипуляций с кодом завершать не нужно, и в самом примере все выглядит прекрасно сразу после добавления __unicode__ в модель

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

>>> from polls.models import Poll, Choice

# Make sure our __unicode__() addition worked.
>>> Poll.objects.all()
[<Poll: What's up?>]
Собственно, что я делаю не так?

Офлайн

#2 Фев. 11, 2013 05:27:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

__unicode__ разбираемся раз и навсегда

>>>У меня python 3.2
ИМХО, рановато Вы Джангу под третьим питоном юзаете, нужно подождать до версии 1.6



Офлайн

#3 Фев. 11, 2013 20:44:45

wiygn
Зарегистрирован: 2012-08-19
Сообщения: 52
Репутация: +  2  -
Профиль   Отправить e-mail  

__unicode__ разбираемся раз и навсегда

Все-таки неправильно понял объяснения на stackoverflow. В python 3+ вместо __unicode__ используется __str__. В итоге имеем такой код:

class Post(models.Model):
	heading = models.CharField("Заголовок", max_length=200)
	def __str__(self):
		return self.heading
Проверяем в консоли:
>>>from blog.models import Post
>>> Post.objects.all()
[<Post: ddddddd>, <Post: FOO>]
Успех

Вывод для таких же нубов как и я: сначала читать документацию, потом браться за туториалы. Закройте тему, пожалуйста.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version