Анисимов.Орг блог оч. кратко о ежедневном

Если не создается superuser / Django

Если в ответ на одну из нижеследующих команд:

manage.py syncdb
manage.py createsuperuser

Django начинает дико ругаться на непонятном языке:

django.db.utils.DatabaseError: You must not use 8-bit bytestrings unless you use
a text_factory that can interpret 8-bit bytestrings (like text_factory = str).
It is highly recommended that you instead just switch your application to Unicode strings.

значит Вы пытаетесь работать в Windows и ваш текущий пользователь имеет русскоязычное наименование.

Все дело в том, что авторы Django не задумывались, что имя пользователя системы может содержать совсем не латинские символы. При создании суперюзера джанга пытается сумничать, предлагая умолчательное имя суперюзера, которое соответствует имени текущего пользователя системы. Если текущий пользователь обозван по-пиндосски, проблем не возникает. Если же Ваш аккаунт называется "Василий Батькович Пупкин", то джанга пережить этого уже не может и скоропостижно умирает.

Куда бежать? Что делать?

Можно воспользоваться замечательным способом monkey patching. Берем и редактируем файл ядра джанги createsuperuser.py. У меня он расположен в папке:

c:\Python27\Lib\site-packages\django\contrib\auth\management\commands\

Ищем по файлу подстроку "username=default_username". Для версии Django 1.3 искомое находится в 72 строке кода. Заменяем старый код:

User.objects.get(username=default_username)

на новый:

User.objects.get(username=default_username.decode('cp1251'))

Усе.

Анисимов.Орг

Персональный сайт одного человека из Екатеринбурга.

Деятельность

САМОСТРОИТЕЛЬ - интернет-магазин товаров для умелых рук: технология ТИСЭ, компоненты умного дома, книги по строительству и ремонту.

128K - веб-издательство.

Обедоед - путеводитель голодного человека.

 

Сайт, который построил

Вячеслав В. Анисимов © 2003-2011

Используя авторские материалы не забывайте указывать прямую активную ссылку на источник.

Как связаться?

Электропочта: v@anisimov.org.