[英]Django on_delete=models.CASCADE not working when using related_name
我有一個名為 Proposal 的 model ,它通過兩個不同的字段與 model 客戶相關。 我希望如果任何相關用戶被刪除,提案也將被刪除。 但是, 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()
發現了問題。 測試是錯誤的。 在修改外鍵以應用更改時,您需要保存當前 model 和相關 model 。
@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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.