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