Я настроил приведенный ниже маршрутизатор базы данных, но как только я запустил его, вывод показал успешность, но таблицы не отображаются в базе данных. Я попытался пройтись по коду в режиме отладки, но не могу понять, почему он не будет записывать в мой специальный маршрутизатор БД. Я изменил конфигурацию так, чтобы мой маршрутизатор БД по умолчанию использовал конфигурацию нового маршрутизатора, и были созданы таблицы по умолчанию django. Таким образом, это доказывает, что я могу подключиться и записать в свой стандартный и настраиваемый маршрутизатор БД.
структура моего проекта:
├── django_app
│ ├── manage.py
│ ├── package.json
│ ├── __pycache__
│ ├── requirements.txt
│ └── zoho_integration
│ ├── apps
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ └── quoting
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── forms.py
│ │ ├── __init__.py
│ │ ├── migrations
│ │ │ ├── 0001_initial.py
│ │ │ ├── __init__.py
│ │ │ └── __pycache__
│ │ ├── models.py
│ │ ├── __pycache__
│ │ ├── serializers.py
│ │ ├── static
│ │ │ └── quoting
│ │ │ ├── css
│ │ │ │ └── index_style.css
│ │ │ └── js
│ │ │ └── product_selection.js
│ │ ├── templates
│ │ │ └── quoting
│ │ │ ├── index.html
│ │ │ └── quote_post.template
│ │ ├── tests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ └── unit
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ ├── test_models
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ └── test_models.py
│ │ │ ├── test_static
│ │ │ │ └── product_selection.test.js
│ │ │ └── test_views
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ └── test_views.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── asgi.py
│ ├── db_routers
│ │ ├── ct_router.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ ├── __init__.py
│ ├── lib
│ │ ├── aggregate_products.py
│ │ ├── form_to_zoho.py
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ ├── zoho
│ │ │ ├── auth.py
│ │ │ ├── blueprint.py
│ │ │ ├── deal.py
│ │ │ ├── __init__.py
│ │ │ ├── layouts.py
│ │ │ ├── module.py
│ │ │ ├── products.py
│ │ │ ├── __pycache__
│ │ │ └── quote.py
│ │ └── zoho_layout_etl.py
│ ├── __pycache__
│ ├── settings
│ │ ├── base.py
│ │ ├── __init__.py
│ │ ├── local.py
│ │ ├── production.py
│ │ └── __pycache__
│ ├── tests
│ │ ├── apps
│ │ │ ├── __init__.py
│ │ │ └── __pycache__
│ │ ├── __init__.py
│ │ ├── lib
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ └── unit
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ ├── test_aggregate_products.py
│ │ │ └── test_quote_etl.py
│ │ └── __pycache__
│ ├── urls.py
│ └── wsgi.py
├── docker
│ └── django
│ ├── Dockerfile
│ └── setup.sh
Мои настройки БД:
from zoho_integration.settings.base import *
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
DATABASE_ROUTERS = ['zoho_integration.db_routers.ct_router.CtRouter']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'OPTIONS': {
'options': '-c search_path=ct_quoting'
},
'NAME': os.environ['db_name'],
'USER': os.environ['db_user'],
'PASSWORD': os.environ['db_password'],
'HOST': os.environ['db_host'],
'PORT': os.environ['db_port'],
},
'ct': {
'ENGINE': 'django.db.backends.postgresql',
'OPTIONS': {
'options': '-c search_path=ct'
},
'NAME': os.environ['db_name'],
'USER': os.environ['db_user'],
'PASSWORD': os.environ['db_password'],
'HOST': os.environ['db_host'],
'PORT': os.environ['db_port'],
}
}
Мой установлен настройки приложения:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'zoho_integration.apps.quoting.apps.QuotingConfig',
]
мои приложения для цитирования apps.py:
from django.apps import AppConfig
class QuotingConfig(AppConfig):
name = 'zoho_integration.apps.quoting'
def ready(self):
pass
мой пользовательский класс курсора БД ct_router.py:
class CtRouter(object):
route_app_labels = {'quoting'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'ct'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'ct'
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 == 'ct'
return None
мой файл миграции:
# Generated by Django 3.0.2 on 2020-03-08 21:52
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Product',
fields=[
('zoho_product_id', models.IntegerField(primary_key=True, serialize=False)),
('product_name', models.CharField(max_length=255)),
],
options={
'db_table': 'quoting_product',
'managed': True,
},
),
migrations.CreateModel(
name='ProductDependency',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('product', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='product', to='quoting.Product')),
('product_dependencies', models.ManyToManyField(to='quoting.Product')),
],
options={
'db_table': 'quoting_product_dependency',
'managed': True,
},
),
]
и, наконец, мой вывод при запуске migrate:
/home/j/zoho_integration/bin/python /home/j/IdeaProjects/zoho_integration/django_app/manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, quoting, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying quoting.0001_initial... OK
Applying sessions.0001_initial... OK
Process finished with exit code 0
но таблицы цитирования отсутствуют в базе данных?