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)'
Вернуться на верх