django маршрутизатор базы данных не пишет в базу данных - PullRequest
0 голосов
/ 09 марта 2020

Я настроил приведенный ниже маршрутизатор базы данных, но как только я запустил его, вывод показал успешность, но таблицы не отображаются в базе данных. Я попытался пройтись по коду в режиме отладки, но не могу понять, почему он не будет записывать в мой специальный маршрутизатор БД. Я изменил конфигурацию так, чтобы мой маршрутизатор БД по умолчанию использовал конфигурацию нового маршрутизатора, и были созданы таблицы по умолчанию 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

но таблицы цитирования отсутствуют в базе данных?

...