簡體   English   中英

Django on_delete=models.CASCADE 在使用相關名稱時不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM