Кажется, вы создаете первичные ключи и внешние ключи вручную.
ALTER TABLE producto ADD CONSTRAINT producto_pk PRIMARY KEY ( codigo );
ALTER TABLE catalogo ADD CONSTRAINT catalogo_pk PRIMARY KEY ( codigo );
ALTER TABLE catalogo_producto
ADD CONSTRAINT cat_prod_catalogo_fk FOREIGN KEY ( catalogo_id )
REFERENCES catalogo ( codigo );
ALTER TABLE catalogo_producto
ADD CONSTRAINT cat_prod_producto_fk FOREIGN KEY ( producto_id )
REFERENCES producto ( codigo );
Вы указываете внешние ключи на несуществующие первичные ключи.Это даже создается Oracle?(Или, может быть, я неправильно читаю это.)
Возможно, вы создаете их в своих собственных скриптах SQL или они уже созданы.
Обычно в Django вы не пишете скрипты SQLдля создания таблиц самостоятельно, но вы пишете модели и затем запускаете:
./manage.py makemigrations # creates the files that create the DB structure
./manage.py migrate. # actually accesses the DB and creates the tables
Django создаст столбцы первичного ключа, назвав их ID
.В общем, эти столбцы нужны для объединений (вы не сможете присоединиться к Oracle с вашими текущими ограничениями, это должно дать вам ошибку, очень похожую на ту, что вы получаете от Django).
Django также установитForeignKey ограничивается с помощью makemigrations
и migrate
, присваивая им соответствующие имена, используя имена полей в ваших моделях.
Если вам разрешено создавать свои собственные таблицы, удалите все параметры db_*
из вашегокод и запустить makemigrations
, потому что вам не придется проверять дубликаты имен таблиц.Позвольте Django выполнять работу везде, где только можно.
Миграции Django помогут вам отслеживать изменения, которые вы вносите в свои модели с течением времени и которые должны быть отражены в структуре вашей БД.Одна из причин использования Django заключается именно в том, что вы не хотите поддерживать это вручную.Смотри https://docs.djangoproject.com/en/2.1/topics/migrations/.