Django.db.utils.DatabaseError: ORA-02267: тип столбца несовместим со ссылочным типом столбца
Я использую Django и Oracle, мне нужно использовать некоторую таблицу из другого Scehma
class ModelTable1(models.Model):
official_id = models.CharField(db_column="ID_OFFICIAL", primary_key=True, max_length=20)
field_1 = models.CharField(max_length=25, db_column="COLUMN_X", blank=True, null=True)
field_2 = models.CharField(max_length=25, db_column="COLUMN_Y", blank=True, null=True)
class Meta:
db_table = '"SCHEMAX"."TABLE1"'
default_permissions = []
managed = False
Когда я пытаюсь установить связь с моделью из моей схемы и запускаю миграцию, у меня возникает такая ошибка: django.db.utils.DatabaseError: ORA-02267: тип столбца несовместим с типом ссылающегося столбца
Мое определение модели таково:
class ModelTable2(AuditDataMixin):
id = models.AutoField(db_column='ID', primary_key=True)
official_id = models.ForeignKey(
ModelTable1, models.DO_NOTHING, db_column="ID_OFFICIAL"
)
status = models.CharField(db_column='ESTADO', max_length=2, blank=True, null=True)
class Meta:
db_table = 'TABLE2'
default_permissions = []
Когда я перешел к таблице, я вижу проблему, SCHEMAX.Table1.ID_OFFICIAL имеет тип Varchar2(20) и MYSCHEMA.Table2.ID_OFFICIAL имеет тип NVARCHAR2(20).
Что я могу сделать, чтобы при запуске миграции FK создавался как Varchar2?
Спасибо!!!
Я думаю, что у вас есть два варианта. Либо попытаться изменить тип SCHEMAX.Table1.ID_OFFICIAL на nvarchar, либо попытаться использовать varchar для MYSCHEMA.Table2.ID_OFFICIAL.
Хотя вы должны попробовать первый вариант непосредственно на вашей БД (поскольку managed=False), вы можете попробовать настраиваемое поле модели для второго варианта. Вот пример (не проверенный):
class MyCustomField(models.Field):
def rel_db_type(self, connection):
return 'Varchar2(20)'