Форум сайта python.su
Сейчас осваиваю flask и sqlalchemy, по урокам (http://habrahabr.ru/post/196810/). Возникла одна проблемка, помогите разрешить пожалуйста.
Есть модель с переопределённым методом repr:
from app import db ROLE_USER = 0 ROLE_ADMIN = 1 class User(db.Model): id = db.Column(db.Integer, primary_key = True) nickname = db.Column(db.String(64), index = True, unique = True) email = db.Column(db.String(120), index = True, unique = True) role = db.Column(db.SmallInteger, default = ROLE_USER) def __repr__(self): return '<User %r>' % (self.nickname)
Офлайн
Офлайн
Diman3654Потому что в django метод __str__ у модели берет значение из __unicode__, если это возможно.
В django все решалось переопределением метода unicode, а тут это не работает
Офлайн
GreyZmeem
Я находил этот пост, когда гуглил эту проблему. Мне это не помогло, может быть конечно я не правильно понял, что вы предлагаете.
Офлайн
Diman3654,
Потому что %r означает:
1. Что у объекта self.nickname будет вызван метод __repr__
2. Т.к. self.nickname содержит unicode, а __repr__ должен вернуть string, то ему не остаётся ничего другого как сделать .encode('unicode-escape') для вашей строки. Потому что он ничего не знает о том, какую кодировку вы собираетесь использовать.
Попробуйте сделать:
return '<User %s>' % (self.nickname.encode('utf-8'))
Офлайн
Пробовал, пишет UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd0 in position 7: ordinal not in range(128)
Офлайн