Модель Django с базой данных Oracle возвращает ошибку: ORA-00904 недействительный идентификатор

я пытаюсь соединить две таблицы базы данных с внешним ключом и получаю ошибку
. ORA-00904: "A"."A_NR_ID": invalid identifier
для модели:

class A(models.Model):
    id = models.IntegerField(primary_key=True)
    a_nr = models.ForeignKey(B, models.DO_NOTHING)
--> #anr = models.ForeignKey(B, models.DO_NOTHING, db_column="a_nr")
    f_b = models.CharField(max_length=1)
    ...

class B(models.Model):
    id = models.IntegerField(primary_key=True)
    ...

Если заменить a_nr на строку комментария anr, то все работает. И я понятия не имею почему, так как в имени используется только одинарное подчеркивание. Также столбец f_b, кажется, работает совершенно нормально.
Если я затем запускаю "makemigrations", он пытается удалить колонку a_nr и создать anr, что также не имеет смысла, поскольку я думал, что db_column="a_nr" сохранит действительное имя в базе данных oracle неизменным.

Вторая ошибка:
ORA-00904: "D"."BEZEICHNUNG_ID": invalid identifier
для модели:

class C(models.Model):
    id = models.IntegerField(primary_key=True)
    bezeichnung = models.CharField()


class D(models.Model):
    id = models.IntegerField(primary_key=True)
    bezeichnung =  models.ForeignKey(C, models.DO_NOTHING)
    ...

И здесь я не могу понять, что не так.

Если я заменю a_nr на строку комментария anr, то все работает. И я понятия не имею почему, так как в имени используется только одинарное подчеркивание.

This has nothing to do with the name of the field, but that of the database: for a ForeignKey, and OneToOneField, if your field is named fieldname, it will use as database column by default fieldname_id. You can use the db_column=… parameter [Django-doc] to specify the name of the column to use, so:

class A(models.Model):
    a_nr = models.ForeignKey(B, models.DO_NOTHING, db_column='a_nr')
    # …


class D(models.Model):
    bezeichnung = models.ForeignKey(C, models.DO_NOTHING, db_column='bezeichnung')
    # …
Вернуться на верх