Django нет такой таблицы: Fligts_country при попытке миграции модели приложения с помощью внешнего ключа
Intro
Здравствуйте, прежде всего, заранее спасибо за помощь. Я изучаю фреймворк Django и у меня возникли проблемы при попытке создать простое отношение между двумя таблицами в моей модели. Я запускаю django и mysql в docker в двух отдельных контейнерах, созданных с помощью файла docker-compose (код приведен ниже), и пока мне не удается создать таблицы (миграции).Проблема
Когда я выполняю команду:python manage.py migrate --database=mariadb
В результате я получаю:
django.db.utils.OperationalError: no such table: Fligts_country
В других сообщениях, похожих на это (Django - no such table exception, например) я вижу, что общим решением является удаление папки pycache и миграций, но это не работает для меня, и я бьюсь уже некоторое время...
Желаемое решение
Мне нужно, чтобы таблицы были созданы в базе данных, но самое главное - я хочу знать, что именно не так в моем коде. Я предполагаю, что есть что-то, что я упускаю в отношении внешних ключей.Мой код на данный момент
Docker-compose.yml
version: '3'
services:
travel-crawler:
restart: always
container_name : travel-crawler
build: ./Crawler
tty: true
ports:
- '9005:8080'
volumes:
- type: bind
source : E:\python-code\Traveler\Crawler
target : /home/shared-files/
db-traveler:
image: mariadb
restart: always
container_name : db-traveler
ports:
- '3306:3306'
environment:
MARIADB_ROOT_PASSWORD: pwd
MARIADB_DATABASE : travel-crawler
MARIADB_USER : user
MARIADB_PASSWORD : password
#avoid error for STRICT_TRANS_TABLES (error was thrown if no default value was assigned to primary key)
command: mysqld --sql_mode=""
#command: python manage.py runserver 0.0.0.0:8000
expose:
- '3306:3306'
volumes:
# persist data files into `datadir` volume managed by docker
- dbdatavol:/var/lib/mysql
# bind-mount any sql files that should be run while initializing
- ./tables.sql:/docker-entrypoint-initdb.d/schema.sql
volumes:
dbdatavol:
networks:
net:
ipam:
driver: default
config:
- subnet: 212.172.1.0/30
host:
name: host
external: true
Определение базы данных в settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'mariadb': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'travel-crawler',
'USER' : 'user',
'PASSWORD' : 'password',
'HOST' : 'db-traveler',
'PORT' : '3306'
}
}
app/models.py
from django.db import models
from django.contrib import auth
from django.core.validators import MaxValueValidator, MinValueValidator
# Create your models here.
class Country(models.Model):
name = models.CharField(help_text = 'Name of the country', max_length = 50)
code = models.CharField(help_text = 'alpha2_code', max_length = 4)
code_2 = models.CharField(help_text = 'alpha2_code', max_length = 4)
class ProxyServer(models.Model):
"""
ProxyServer description for VPN connections
"""
host = models.CharField(help_text = 'Name of the host', max_length = 30)
proxy = models.IntegerField(help_text = 'Port to conenct to', validators=[MaxValueValidator(65535), MinValueValidator(1)])
#country = models.CharField(help_text = 'Country Name')
country = models.ForeignKey(Country, choices=Country.objects.values_list('name', flat=True), on_delete = models.DO_NOTHING)