Не ascii строка в аргументе verbose_name при объявлении поля БД в Django - PullRequest
2 голосов
/ 24 января 2009

Я заявляю это:

#This file is using encoding:utf-8
...
class Buddy(models.Model):
    name=models.CharField('ФИО',max_length=200)
    ...

... в models.py. manage.py syncdb работает без сбоев. Однако, когда я захожу в интерфейс администратора и пытаюсь добавить нового друга, я ловлю DjangoUnicodeDecodeError, который говорит: «Кодек utf8 не может декодировать байты в позиции 0-1: недопустимые данные. Вы передали в \ xd4 \ xc8 \ xce '(

Я использую sqlite3, поэтому все строки хранятся в виде строк, закодированных в utf8. Кодировка Джанго также utf8. Видел документы Джанго на эту тему, понятия не имею.

UPD: в конце концов я понял, в чем проблема. Оказалось, что я сохранил свой источник в кодировке ANSI.

Решение: Я сохранил источник в UTF-8, и он творил чудеса.

1 Ответ

5 голосов
/ 24 января 2009

Во-первых, я бы определил ваше описание как строку Unicode:

class Buddy(models.Model):
    name=models.CharField(u'ФИО',max_len)

Обратите внимание на 'u' в u'ФИО'.

Во-вторых, у вас есть функция __unicode__(), определенная в вашей модели? Если это так, убедитесь, что он возвращает строку Unicode. Вполне вероятно, что вы получаете эту ошибку, когда интерфейс администратора пытается получить доступ к представлению модели в юникоде, а не когда он добавляется в базу данных. Если вы возвращаете не-юникодную строку из __unicode__(), это может вызвать эту проблему.

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