Маршрутизаторы баз данных Django
Я настроил маршрутизаторы в своем проекте django, но, похоже, таблицы не заполняются ни в одной из баз данных. Каждый раз, когда я запускаю 'python manage.py makemigrations HealthcareProject4', я вижу, что файл миграции создается успешно. Однако когда я запускаю 'python manage.py migrate --database=default, ничего не появляется ни в одной из установленных баз данных.
db_routers.py
settings.py
models.py
from django.db import models
# Create your models here.
class TestModel(models.Model):
Test = models.CharField(max_length=20)
class Meta:
app_label = 'EducationProject'
Методы маршрутизатора db_for_read и db_for_write должны возвращать имя базы данных, которая будет использоваться, а не метку приложения. Вы должны вернуть ключ, используемый в дикте DATABASES (один из следующих: default, crm, education, finance, legals, machinelearning, media, music, socialservices, users, auth). То же самое относится и к методу allow_migrate, вы должны сравнивать db с именем базы данных, а не с меткой приложения. Так, например:
class EducationRouter:
route_app_labels = ['EducationProject']
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'education' # Here
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'education' # Here
return None
def allow_relation(self, obj1, obj2, **hints):
if (
obj1._meta.app_label in self.route_app_labels or
obj2._meta.app_label in self.route_app_labels
):
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'education' # Here
return None
Затем выполните следующие команды:
python manage.py makemigrations
python manage.py migrate