Модель 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')
# …