Какая структура лучше для удаления 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 на уровне БД, поэтому он должен не только работать лучше, но и избежать распространенной ошибки или не удаления объекта.

on_delete Django

Вернуться на верх