Django не видит отношения в тестах рабочего процесса
В обычных тестах, выполняемых локально, но если я пытаюсь запустить их через рабочие процессы, то получаю ошибку:
Django жалуется на следующую конструкцию внутри forms.py
:
class FindToursForm(forms.Form):
country_choice_list, city_choice_list = [('', '')], [('', '')]
city_objects = City.objects.all()
country_choice_list += [(city.country.id, city.country.name) for city in city_objects]
city_choice_list += [(city.id, city.name) for city in city_objects]
country = forms.ChoiceField(choices=country_choice_list, required=True)
city = forms.ChoiceField(choices=city_choice_list, required=True)
А именно, в строке country_choice_list += [(city.country.id, city.country.name) for city in city_objects]
pylint.yml
:
name: library_app tests
on: [push]
jobs:
container-job:
name: Tests
runs-on: ubuntu-latest
services:
postgres:
image: postgis/postgis
env:
POSTGRES_PASSWORD: test
POSTGRES_DBNAME: postgres
POSTGRES_USER: test
POSTGRES_PORT: 5432
POSTGRES_HOST: 127.0.0.1
ports:
- 5432:5432
steps:
- uses: actions/checkout@v2
- name: Install Python
uses: actions/setup-python@v2
with:
python-version: "3.10.12"
- name: Install modules and dependencies
run: |
sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt-get update
sudo apt-get install gdal-bin libgdal-dev
pip install GDAL==3.6.4
python -m pip install --upgrade pip
pip install -r tests/requirements.txt
- name: API tests
run: |
chmod +x tests/test.sh
./tests/test.sh tests.test_api
runner.py
:
"""Database setup."""
from types import MethodType
from typing import Any
from django.db import connections
from django.db.backends.base.base import BaseDatabaseWrapper
from django.test.runner import DiscoverRunner
def prepare_db(self):
"""Create database schema.
Args:
self: type - class object.
"""
self.connect()
self.connection.cursor().execute('CREATE SCHEMA IF NOT EXISTS tours_data;')
class PostgresSchemaRunner(DiscoverRunner):
"""Run table schema."""
def setup_databases(self, **kwargs: Any) -> list[tuple[BaseDatabaseWrapper, str, bool]]:
"""Pre-setup database for work.
Args:
kwargs: Any - key word arguments.
Returns:
list[tuple[BaseDatabaseWrapper, str, bool]]: setupped database.
"""
for conn_name in connections:
connection = connections[conn_name]
connection.prepare_database = MethodType(prepare_db, connection)
return super().setup_databases(**kwargs)
Да, он на 100% указан в settins.py
tests.sh
:
export DJANGO_SECRET_KEY="django-insecure-pt4!7*d%-dn)&lx6@598y(1!!rljgaieunnwk!n)-#r^ew(dcb"
export PG_HOST=127.0.0.1
export PG_PORT=5432
export PG_USER=test
export PG_PASSWORD=test
export PG_DBNAME=postgres
export MINIO_ACCESS_KEY_ID=ULk99g9UwyucWln57ypo
export MINIO_SECRET_ACCESS_KEY=dGKHOvOO9166VEMOO0tSRdUVVUcm5odgYgB2Yfjs
export MINIO_STORAGE_BUCKET_NAME=static
export MINIO_API=http://localhost:9000
export MINIO_CONSISTENCY_CHECK_ON_START=False
python3 manage.py test --verbosity=3 $1
Если вам нужно больше кода, дайте мне знать.
Весь код находится здесь: https://github.com/rTiRe/tours_manager.
Папка с инициализированным приложением django: manager
Я предполагаю, что ошибка заключается в том, что тесты изначально проверяют весь мой код, и он обращается к таблицам, которые еще не были созданы, но я понятия не имею, как это исправить :(
).Извините за мой английский, я все еще часто пользуюсь переводчиком.