Django - Ограничение внешнего ключа не работает при удалении с помощью сквозной модели

Я работаю над REST api, используя Django Rest, и одна конечная точка включает удаление модели Contact, которая может иметь несколько адресов, связанных с ней через ContactAddress через model.

Модель контакта выглядит следующим образом:

class Contact(AuditModel):
    contact_id = models.AutoField(primary_key=True)
    address = models.ManyToManyField('Address', through='ContactAddress')
    name_first = models.CharField(max_length=100)
    name_last = models.CharField(max_length=100)

ContactAddress выглядит следующим образом:

class ContactAddress(models.Model):
    contact = models.ForeignKey('Contact', on_delete=models.CASCADE)
    address = models.ForeignKey('Address', on_delete=models.CASCADE)
    is_billing = models.BooleanField(null=True, default=False)
    is_shipping = models.BooleanField(null=True, default=False)

А модель адреса выглядит следующим образом:

class Address(AuditModel):
    address_id = models.AutoField(primary_key=True)
    postcode = models.CharField(max_length=30, blank=True, null=True)
    region = models.CharField(max_length=100, blank=True, null=True)
    street_line_1 = models.CharField(max_length=500, blank=True, null=True)
    street_line_2 = models.CharField(max_length=500, blank=True, null=True)
    street_line_3 = models.CharField(max_length=500, blank=True, null=True)

При попытке удалить контакт таким образом contact.delete() я получаю следующую ошибку MySQL:

django.db.utils.IntegrityError: (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`mnghub`.`contact_addresses`, CONSTRAINT `contact_addresses_contact_id_cadc11a0_fk_contacts_contact_id` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`contact_id`))')

Я получаю эту ошибку, несмотря на то, что у контакта нет адресов, связанных с ним. Я предполагаю, что это ограничение связано с тем, что отношение "многие ко многим", но я хочу иметь возможность удалять связанные модели, если они связаны только с одним объектом

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