Настройка pytest-django и pre-commit в проекте Django

У меня есть проект Django со следующей конструкцией:

.
├── db.sqlite3
├── manage.py
├── switch
│   ├── __init__.py
│   ├── settings.py
├── store
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── tests
|   |   ├── __init__.py
|   |   ├── tests.py
│   ├── apps.py
│   ├── migrations
│   ├── urls.py
│   └── views.py
├── .pre-commit-config.yaml
└── pytest.ini

Моим автором является test.ini:

[pytest]
DJANGO_SETTINGS_MODULE = store.settings
python_files = tests.py tests_*.py *_tests.py

Файл предварительной коммисии.yaml:

exclude: "^docs/|/migrations/"
default_stages: [commit]

repos:
  - repo: local
    hooks:
      - id: pytest-check
        name: pytest-check
        entry: pytest
        language: system
        pass_filenames: false
        always_run: true

При локальном запуске тестов pytest все работает без ошибок. При локальном выполнении пре-коммита pre-commit run --color=always --all-files все работает без ошибок.

При попытке фиксации возникает ошибка: django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Если добавить принудительную установку переменной окружения в тестовый файл с путем к файлу настроек и вызвать django.config(), то проблема решается.

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "store.settings")

django.setup()

Но я думаю, что это неправильный путь и есть другое, более оптимальное решение. Пожалуйста, помогите мне. Спасибо

Вернуться на верх