У меня есть две модели Django, связанные через ManyToManyField
:Удалить связанные модели в Джанго через ManyToManyField
class Board(models.Model):
name = models.CharField(max_length=100, blank=False)
class Card(models.Model):
title = models.CharField(max_length=100, blank=False)
boards = models.ManyToManyField(Board)
Как вы можете видеть, Card
может появиться в нескольких Board
с. Алгоритм Я хотел бы написать следующим образом:
- Если удалить все
Card
сек вBoard
, это нормально.Board
остается пустым, и все. - Если я удалю
Board
, всеCards
, которые не прикреплены к другомуBoard
, должны быть удалены.
Моей первая идея заключается в том переопределение pre_delete
сигнала на Board
, но я не уверен, что это лучший способ сделать это.
[В документации Django] [1] он говорит: Обратите внимание, что метод delete() для объекта не обязательно вызывается при удалении объектов в массе с помощью QuerySet. Чтобы обеспечить выполнение индивидуальной логики удаления, вы можете использовать сигналы pre_delete и/или post_delete. [1]: https://docs.djangoproject.com/en/1.5/topics/db/models/#overriding-predefined-model-methods –
Вы правы. Извините, я думал о 'pre_save' и' post_save'. В этом случае вы должны использовать 'pre_delete'. Но тот же код должен работать - просто переместите его в' pre_save' – jproffitt
. Я отредактировал свой ответ, чтобы вместо этого использовать 'pre_delete'. – jproffitt