Ошибка при выполнении пользовательской команды manage.py
Я создаю многопользовательское приложение на основе этой страницы https://www.section.io/engineering-education/implement-multitenancy-with-multiple-databases-in-django/#use-middlewares-for-tenant-specific-database-routing.
Он просит создать пользовательский manage.py (с именем myapp_manage.py) для создания суперпользователя, таким образом, я могу указать базу данных, которую я хочу запустить командой следующим образом:
python myapp_manage.py databasename createsuperuser --database=databasename
Все было хорошо, я мог запустить команду без проблем, но теперь, когда я пытаюсь запустить ее, она выдает ошибку:
django.core.exceptions.ImproperlyConfigured: Запрошена настройка INSTALLED_APPS, но настройки не настроены. Вы должны либо определить переменную окружения DJANGO_SETTINGS_MODULE, либо вызвать settings.configure() перед доступом к настройкам.
.
Я не понимаю, почему появляется эта ошибка, ведь окружение в пользовательском manage.py настроено точно так же, как и в стандартном manage.py.
Custom manage.py:
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
from myapp.middleware import set_db_for_router
if __name__ == "__main__":
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'al_project.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
# new
from django.db import connection
args = sys.argv
db = args[1]
with connection.cursor() as cursor:
set_db_for_router(db)
del args[1]
execute_from_command_line(args)
Стандартный manage.py:
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'al_project.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
Итак, строка 'os.environ.setdefault' одинаковая в обоих файлах, и я могу запускать команды manage.py без каких-либо проблем, что, как я понимаю, свидетельствует о том, что путь к файлу правильный, но я не могу запустить команду myapp_manage.py (файл находится в том же пути, что и файл manage.py).
Я обновил Django вчера, но выполнил команду сегодня в первый раз без проблем. Во второй раз, когда я попытался, я получил ошибку. Что может быть не так?