Избегайте добавления имени приложения в имя таблицы в django
Я реализовал маршрутизацию баз данных в django. Я создаю таблицы в двух разных базах данных, используя маршрутизацию базы данных в django. Проблема в том, что имя приложения добавляется в имя таблицы базы данных. Я использую базу данных prosgreSql.
Я пытался указать db_table в качестве значения в классе Meta, но у меня ничего не получается. Я ожидаю только имя таблицы в базе данных. Я использую базу данных prosgreSql
App1 - модель
from django.db import models
# Create your models here.
class sample_table1(models.Model):
id = models.IntegerField
col1 = models.CharField(max_length=100)
col2 = models.CharField(max_length=50, null=True)
col3 = models.CharField(max_length=200, null=True)
class meta:
db_table = 'Sample_DB1'
db_router = 'router.MyDBRouter.MyDB_Router'
app_label = 'app1'
def __str__(self):
return f"{self.id}, {self.col1}"
class sample_table2(models.Model):
id = models.IntegerField
col1 = models.CharField(max_length=100)
class meta:
db_table = 'Sample_DB2'
db_router = 'router.MyDBRouter.MyDB_Router'
app_label = 'app1'
def __str__(self):
return f"{self.id}, {self.col1}"
class sample_table3(models.Model):
id = models.IntegerField
col1 = models.CharField(max_length=100)
class meta:
db_table = 'Sample_DB3'
db_router = 'router.MyDBRouter.MyDB_Router'
app_label = 'app1'
def __str__(self):
return f"{self.id}, {self.col1}"
app2 - модель
from django.db import models
# Create your models here.
class tbl2(models.Model):
id = models.IntegerField
col22 = models.CharField(max_length=100)
col33 = models.CharField(max_length=10, null=True)
class meta:
db_table = 'Sample_tbl2'
db_router = 'router.MyDBRouter.MyDB_Router'
app_label = 'app2'
def __str__(self):
return f"{self.id}, {self.col1}"
Router
class MyDB_Router:
def db_for_read(self, model, **hints):
if model._meta.app_label == 'app1':
return 'database1'
elif model._meta.app_label == 'app2':
return 'database2'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'app1':
return 'database1'
elif model._meta.app_label == 'app2':
return 'database2'
return None
def allow_relation(self, obj1, obj2, **hints):
# Allow relations if both objects are from the same app
return obj1._meta.app_label == obj2._meta.app_label
def allow_migrate(self, db, app_label, model_name=None, **hints):
# Allow models in apps 'app1' and 'app2' to be migrated to database1 and database2 respectively
if app_label in ['app1', 'app2']:
return db == 'database1' if app_label == 'app1' else db == 'database2'
return None
файл settings.py
DATABASES = {
'default': {},
'database1': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'database1_name',
'USER': 'postgres',
'PASSWORD': 'abc123.',
'HOST': 'localhost',
'PORT': '5432',
},
'database2': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'database2_name',
'USER': 'postgres',
'PASSWORD': 'abc123.',
'HOST': 'localhost',
'PORT': '5432',
},
}