Django on_delete=models.CASCADE не работает при использовании related_name

У меня есть модель с именем Proposal, которая связана с моделью Customer двумя разными полями. Я хочу, чтобы при удалении любого из связанных пользователей предложение также было удалено. Однако on_delete=models.CASCADE этого не достигает. Думаю, я мог бы использовать сигнал для запуска такого поведения, но я хочу знать, есть ли лучший способ заставить это работать в Django 4.0.

class Proposal(models.Model):

    # foreign keys
    created_by_customer = models.ForeignKey(Customer, blank=False, on_delete=models.CASCADE)
    accepted_by_customer = models.ForeignKey(Customer, blank=True, null=True, on_delete=models.CASCADE, related_name='accepted_by_customer')

Вот мой тест с помощью Pytest:

@pytest.mark.django_db
def test_delete_proposal_from_created_by_customer():  
    """ Deleting customer that created the proposal must delete proposal """

    created_proposal = random_proposal()
    buyer = random_customer()
    created_proposal.created_by_customer = buyer
    created_proposal.created_by_customer.delete()

Нашли проблему. Тест был неправильным. Для применения изменений необходимо сохранить как текущую модель, так и связанную модель при изменении внешнего ключа

@pytest.mark.django_db
def test_delete_proposal_from_created_by_customer():
    """ Deleting customer that created the proposal must delete proposal """

    created_proposal = random_proposal()
    buyer = random_customer()
    created_proposal.created_by_customer = buyer
    created_proposal.save()  # <----------
    created_proposal.created_by_customer.save()  # <----------
    created_proposal.created_by_customer.delete()

    assert True if Proposal.objects.all().count() == 0 else False
Вернуться на верх