У меня есть две модели:
ciad_db
- MySQL, неуправляемый
class NormalizedData(models.Model):
ticket_number = models.CharField(max_length=100, blank=True, primary_key=True, default='noticketid')
status = models.CharField(max_length=45, blank=True, null=True)
ticket_source = models.CharField(max_length=45, blank=True, null=True)
summary = models.TextField(blank=True, null=True)
conclusion = models.ForeignKey(DsrConclusions, on_delete=models.CASCADE, default=None)
class Meta:
managed = False
db_table = 'normalized_data'
indexes = [
models.Index(
fields=[
'status',
'ticket_source',
'summary',
]
)
]
default
- sqlite3, управляемый
class DsrConclusions(models.Model):
id = models.IntegerField(primary_key=True)
ticket_number = models.CharField(max_length=100, blank=False, null=False, unique=True)
explanation = models.TextField(blank=False, null=False)
final_breach_conclusion = models.BooleanField(blank=False,null=False)
last_owner = models.CharField(blank=False,null=False, max_length=50)
class Meta:
managed = True
indexes = [
models.Index(
fields=[
'ticket_number',
'explanation',
'final_breach_conclusion',
'last_owner',
]
)
]
в models.py
, DsrConclusions
предшествует NormalizedData
Я использую маршрутизатор базы данных из-за двух баз данных, которые выглядят так:
class CiadRouter(object):
"""
A router to control all database operations on models in
the ciadseeweb application
"""
def db_for_read(self, model, **hints):
"""
Point all operations on ciadseeweb models to 'ciad_db'
"""
if model._meta.app_label == 'ciadseeweb':
return 'ciad_db'
return None
def db_for_write(self, model, **hints):
"""
Point all operations on myapp models to 'other'
"""
if model._meta.app_label == 'ciadseeweb':
return 'default'
return None
def allow_syncdb(self, db, model):
"""
Make sure the 'ciadseeweb' app only appears on the 'other' db
"""
if db == 'ciad_db':
return model._meta.app_label == 'ciadseeweb'
elif model._meta.app_label == 'ciadseeweb':
return False
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Relations between objects are allowed if both objects are
in the primary/replica pool.
"""
db_list = ('default', 'ciad_db')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
Поскольку я добавил столбец после выполнения миграции (и все работает нормально), как только я добавляю столбец и запускаю makemigrations
, я получаю No changes detected
, потому что NormalizedData
неуправляем. Затем я изменяю его на управляемый, снова запускаю makemigrations
и получаю их для обнаружения изменений Как только я запускаю migrate
, они применяются просто отлично.
Когда я запускаю сервер (который запускается без ошибок) и обновляю страницу, на которой я рендерим данные NormalizedData
, в таблицу django-tables2
с таблицей django_tables2_column_shifter
.
Чтобы получить данные из модели DsrConclusions
в tables.py
, которая отрисовывается из модели NormalizedData
. Я использую dsr_review = tables.Column(verbose_name='DSR SLA', accessor='dsrconclusions.final_breach_conclusion')
, как указано в документации django-tables2
.
Я получаю:
django.db.utils.OperationalError: (1054, "Unknown column 'normalized_data.conclusion_id' in 'field list'")
Я застрял. Что я делаю неправильно?! Это вообще возможно?
Окружающая среда
Package Name Version
Django 2.2
Python 3.7.2
Crispy_Forms 1.7.2
Debug Toolbar 1.11
Django_Tables2 2.0.6
Django_Tables2_Column_Shifter 0.5.2