Как изменить имя приложения Django?

Я изменил имя приложения в Django, переименовав его папку, импорт и все ее ссылки (шаблоны/индексы). Но теперь я получаю эту ошибку, когда пытаюсь запустить python manage.py runserver

Error: Could not import settings 'nameofmynewapp.settings' (Is it on sys.path?): No module named settings

Как я могу отладить и решить эту ошибку? Любые подсказки?

Ответ 1

Чтобы изменить имя приложения в Django, выполните следующие действия:

  • Переименуйте папку, которая находится в корневом каталоге проекта
  • Измените любые ссылки на ваше приложение в своих зависимостях, то есть файлы приложений views.py, urls.py, 'manage.py' и settings.py.
  • Измените таблицу базы данных django_content_type следующей командой: UPDATE django_content_type SET app_label='<NewAppName>' WHERE app_label='<OldAppName>'
  • Также, если у вас есть модели, вам придется переименовать таблицы моделей. Для postgres используйте ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName. Для mysql тоже я думаю, что это то же самое (как упоминалось @null_radix)
  • (Для Django >= 1.7) Обновите таблицу django_migrations, чтобы избежать повторного запуска предыдущих миграций: UPDATE django_migrations SET app='<NewAppName>' WHERE app='<OldAppName>'. Примечание: есть некоторые дебаты (в комментариях), если этот шаг необходим для Django 1.8+; Если кто-то знает наверняка, пожалуйста, обновите здесь.
  • Если ваш метатег models.py содержит app_name, обязательно переименуйте его тоже (упомянутый @will).
  • Если у вас есть namespaced ваши папки static или templates внутри вашего приложения, вам также нужно будет переименовать их. Например, переименуйте old_app/static/old_app в new_app/static/new_app.
  • Для переименования django models вам нужно будет изменить запись django_content_type.name в БД. Для postgreSQL используйте UPDATE django_content_type SET name='<newModelName>' where name='<oldModelName>' AND app_label='<OldAppName>'

Мета-точка (если используется virtualenv): Стоит отметить, что если вы переименовываете каталог, содержащий ваш virtualenv, вероятно, будет несколько файлов в вашем env, которые содержат абсолютный путь, а также понадобятся быть обновленным. Если вы получаете ошибки, такие как ImportError: No module named ..., это может быть преступником. (благодаря @danyamachine для обеспечения этого).

Другие ссылки:, вы также можете ссылаться на приведенные ниже ссылки для более полного изображения

Ответ 2

Новое в Django 1.7 - это реестр приложений, который хранит конфигурацию и обеспечивает интроспекцию. Этот механизм позволяет изменять несколько атрибутов приложения.

Главное, что я хочу сделать, это то, что переименование приложения не всегда необходимо: при конфигурации приложения можно разрешать конфликтующие приложения. Но и путь, если ваше приложение нуждается в дружественном наименовании.

В качестве примера я хочу назвать свое приложение опросов "Обратная связь с пользователями". Это происходит следующим образом:

Создайте файл apps.py в каталоге polls:

from django.apps import AppConfig

class PollsConfig(AppConfig):
    name = 'polls'
    verbose_name = "Feedback from users"

Добавьте конфигурацию приложения по умолчанию в polls/__init__.py:

default_app_config = 'polls.apps.PollsConfig'

Для получения дополнительной конфигурации приложения: https://docs.djangoproject.com/en/1.7/ref/applications/

Ответ 3

Если вы используете PyCharm и останавливаете работу над проектом после переименования:

  • Отредактируйте конфигурацию Run/Debug и измените переменную среды DJANGO_SETTINGS_MODULE, так как она включает название вашего проекта.
  • Перейдите в Настройки/Языки и Рамки /Django и обновите местоположение файла настроек.