Django отключить каскадное удаление из файла настроек - PullRequest
0 голосов
/ 17 сентября 2018

Я только что заметил, что удаление объекта, который имеет отношение к самому себе, также приводит к удалению соответствующего объекта:

class STH(models.Model):
    ...
    partner = models.ForeignKey(STH, blank=True, null=True)

In [1]: sth = STH.objects.get(name = 'sth01')

In [2]: sth.partner
Out[2]: <STH: sth02>

In [3]: sth.partner.partner
Out[3]: <STH: sth01>

In [4]: sth.delete()
Out[4]: (2, {'app.Disk': 0, 'app.STH': 2})

.

I 'dхотел бы изменить это поведение из setting.py , чтобы это не удаляло партнера, только исходный объект и устанавливало отношение в NULL.

Как я могудостичь этого?

Django: 1.9.x Python: 3.4.5 Postgresql: 9.4.x

Большое спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

Укажите аргумент on_delete в виде DO_NOTHING

class STH(models.Model):
    ...
    partner = models.ForeignKey(STH, <b>on_delete=models.DO_NOTHING</b>, blank=True, null=True)


UPDATE
как упомянуто @ Кевин Кристофер Генри Вы можете установить его на SET_NULL , поскольку вы определили свое отношение FK с null=True

Можно ли это сделать с помощью settings.py?

AFAIK, вы не можете этого сделать, потому что это команда изменения БД (внутренне). Итак, вам нужно отредактировать всю необходимую модель и выполнить миграцию, чтобы получить желаемый результат

...