Django Unicode кодировать / декодировать ошибки - PullRequest
1 голос
/ 27 декабря 2011

Мой сайт должен иметь возможность обслуживать данные на разных языках. Я установил его так, чтобы он использовал utf-8, и настройки db также установлены на это. Я получаю разные разные ошибки Юникода из-за администратора.

Например:

  1. В списке администраторов, когда поле из списка содержит не ascii char. (я получаю UnicodeDecodeError)
  2. При добавлении новой записи, UnicodeEncodeError, если метод unicode для модели возвращает декодирование utf-8 (которое исправляет # 1).
  3. При использовании filter_horizontal в админке, если данные из используемой модели содержат не ascii-символы, фильтр исчезает из формы.

Если я установлю метод Unicode для модели, которая будет возвращаться, например:

return u'%s' % unicode(self.tag)

Кажется, это исправляет № 1 и № 2, но тогда я получу № 3.

Я очень долго искал решение, но не могу найти то, что исправляет все разные ошибки. Какой лучший способ справиться с этим?

Ответы [ 2 ]

6 голосов
/ 27 декабря 2011
from django.utils.encoding import smart_unicode
...
def __unicode__(self): 
    return smart_unicode(self.tag)
0 голосов
/ 24 августа 2012

Примечательно, что вы можете обойти юникод, просто зашифровав свои данные в шестнадцатеричном формате перед сохранением их в своей базе данных.

Что-то вроде этого достаточно

MyModel(name=name.encode('hex'), password=password).save()

Затем можно выполнить name.decode('hex'), чтобы вернуть данные в прежнее представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...