Почему в полях Django Relationship отсутствует опция on_update? - PullRequest
1 голос
/ 07 мая 2020

Я использую Django 3.0 + MariaDB. Я создал models.py из существующей базы данных с помощью команды «python manage.py inspectdb> models.py». Теперь мне нужно установить параметры для внешних ключей. Как вы знаете, в базе данных у вас может быть несколько вариантов внешних ключей: первый класс c - это «ON_DELETE», а второй - «ON_UPDATE» (вы даже можете иметь больше вариантов в PostgreSQL). В Django есть только «on_delete», но нет опции «on_update», что меня очень удивило. Я ничего не нашел в официальной документации по этому поводу. Ни на некоторые старые сообщения с тем же вопросом ответы не были окончательными и сосредоточены на "on_delete". Я спрашиваю об опции "ON_UPDATE", ни о чем другом. Итак, где же эта опция или почему ее нет в ORM Django?

1 Ответ

2 голосов
/ 07 мая 2020

Django фактически не использует параметры каскада базы данных даже для on_delete

on_delete не создает ограничение SQL в базе данных. Поддержка каскадных опций на уровне базы данных может быть реализована позже.

Ниже перечислены удобные преимущества, поскольку ваше приложение может реагировать на сигналы pre_delete и post_delete, но есть и небольшой недостаток в с точки зрения производительности


Что касается ON_UPDATE

Он не был реализован и использовался довольно редко, поскольку обычно вы никогда не меняете свой идентификатор модели

Вы все еще можете создайте SQL миграцию, если вам нужно что-то конкретное c на уровне базы данных или эмулируйте это на уровне приложения для лучшего контроля (например, переопределив метод сохранения модели)


Что касается дополнительных ограничений базы данных, не связанных с внешними key, есть связанные с ними документы здесь и укажите c до postgreSQL здесь

...