Какая структура лучше для удаления FK-отношений в django?
class Address(models.Model):
old_address = models.CharField(max_length=250)
new_address = models.CharField(max_length=250)
bjdongName = models.CharField(max_length=20)
...
1.
class Listing(models.Model):
title = models.CharField(max_length=25)
address = models.OneToOneField(Address, on_delete=models.SET_NULL, related_name="listing")
def delete(self, *args, **kwargs):
address = self.address
super().delete(*args, **kwargs)
address.delete()
2.
class Listing(models.Model):
title = models.CharField(max_length=25)
class ListingAddress(Address):
listing = models.OneToOneField(Listing, on_delete=models.CASCADE)
Q1. Какая структура лучше?
Q2. Если я хочу удалить родительское поле OneToOneField, я переопределяю метод delete или использую сигнал post_delete. Но являются ли эти действия одинаковыми? Только когда мне нужно удалить_bulk, я должен использовать сигнал? Есть ли другая причина для использования signal delete?
Вам не следует расширять метод delete для удаления родительского объекта, Django обеспечивает эмуляцию поведения SQL ограничения, указанного аргументом on_delete.
С точки зрения производительности Django говорит : Обратите внимание, что метод delete() для объекта не обязательно вызывается при массовом удалении объектов с помощью QuerySet или в результате каскадного удаления.
Таким образом, устанавливая on_delete в CASCADE, вы говорите Django эмулировать поведение SQL на уровне БД, поэтому он должен не только работать лучше, но и избежать распространенной ошибки или не удаления объекта.