Django, TypeError: decode() аргумент 1 должен быть строкой, а не None

Я изучаю Django, и это мой первый проект. Я работаю над этим проектом в этом уроке. https://docs.djangoproject.com/en/1.4/intro/tutorial01/

когда я запустил команду syncdb. были созданы таблицы. то он спросил меня, хочу ли я добавить суперпользователя, я сказал "да". затем получил следующее сообщение об ошибке. Я нашел несколько похожих вопросов о stackoverflow, но все же canot это исправлено.

(django)[email protected]:~/.virtualenvs/testDjango$ ./manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): y
Please enter either "yes" or "no": yes
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 110, in handle_noargs
    emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/sql.py", line 189, in emit_post_sync_signal
    interactive=interactive, db=db)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 73, in create_superuser
    call_command("createsuperuser", interactive=True, database=db)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 150, in call_command
    return klass.execute(*args, **defaults)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 70, in handle
    default_username = get_default_username()
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 105, in get_default_username
    default_username = get_system_username()
  File "/home/feelexit/.virtualenvs/django/local/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 85, in get_system_username
    return getpass.getuser().decode(locale.getdefaultlocale()[1])
TypeError: decode() argument 1 must be string, not None

Обновление: Я использую ubuntu 12.04. Я нашел возможное решение. добавьте следующий код для manage.py. однако рядом с ним есть отказ от ответственности "Я не знаю, вызвало ли это какие-либо негативные побочные эффекты". Я ищу лучший способ исправить это.

import os
os.environ.setdefault('LANG','en_US')

Ответ 1

Это ошибка в коде Django (см. отчет об ошибке django).

Обычный способ в билете исправить это - экспортировать переменную среды оболочки LANG.

export LANG="en_US.UTF-8"

Это работает для меня на установке SuSE.

Ответ 2

export LANG = "en_US.UTF-8"

Работает для меня, но способ сделать это, отредактировав manage.py, django-admin создает другую структуру каталогов, чем раньше, и я перемещаю файлы из settings.py, urls.py из подпапки.

EDIT: os.environ [ "LANG" ] = "en_US.UTF-8" (после импорта os)

Я использовал sys.append для добавления пути, чтобы избежать ошибок импорта.