django: удалить ON DELETE CASCADE поведение django - PullRequest
2 голосов
/ 06 сентября 2010

Я столкнулся с проблемой в разработке django. На самом деле я создал модель, которая включает в себя внешние ключи 4 других моделей. Теперь я использую все эти модели на сайте администратора. Проблема заключается в том, что, когда я удаляю запись, которая использует чужой ключ в моей основной модели, этот процесс удаления также удаляет запись из моей основной модели. Я потребовал, чтобы, если модель включала чужой ключ любой другой модели, а затем удаляла эту запись модели внешнего ключа от администратора, то никакая запись не должна удаляться из модели, которая использует эту модель в качестве внешнего ключа.

Может кто-нибудь иметь представление о том, как я могу остановить этот «ON DELETE CASCADE»

Я буду очень благодарен вам. Привет

Ответы [ 2 ]

11 голосов
/ 21 ноября 2015

В течение некоторого времени существует атрибут on_delete, который можно установить для полей ForeignKey. Пример из Django docs:

  user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
4 голосов
/ 06 сентября 2010

Переопределить MyObj.delete(), чтобы выполнить итерацию по всем ключевым связям, которые вы хотите сохранить, установите их ссылку на объект, который вы удаляете, равным нулю. Затем, когда все отношения отцеплены, звоните super(MyObj, self).delete()

Возможно, вам придется обновить базу данных (и определения модели), чтобы разрешить null = True для тех ключей, которые вы отключаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...