Есть две модели:
class Target(models.Model):
created_dt = models.DateTimeField(auto_now_add=True)
updated_dt = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='targets')
title = models.CharField(max_length=200)
live = models.ManyToManyField(LiveLot, related_name='targets', blank=True)
class Live(models.Model):
created_dt = models.DateTimeField(auto_now_add=True)
updated_dt = models.DateTimeField(auto_now=True)
closed_dt = models.DateTimeField()
Как видно, связь между ними не обязательна. Но в случае необходимости она может быть.
Проблема возникает при удалении объекта Live, в случае, если он имеет связь с Target.
Удалять пробовал через обычный delete:
obj.delete()
Возникает ошибка
psycopg2.IntegrityError: update or delete on table "blabla" violates foreign key constraint "blablabla" on table "app_targe
t_lots"
DETAIL: Key (id)=(32845) is still referenced from table "app_target_live"
Понятно, что ошибка целостности из-за присутствия неудаленной связи.
Решил ее вот так:
obj.targets.clear()
obj.delete()
Но может быть есть более красивый или корректный метод что бы при удалении, сразу удалялись и связи из промежуточной таблицы?