簡體   English   中英

在 admin-django 和 models.CASCADE 中使用不同的刪除行為

[英]Use different delete behavior in admin-django and models.CASCADE

我有兩個 Django 模型,一個用 ForeignKey 引用另一個。 像這樣的東西:

class Data(models.Model):
   [some fields]

class Backup(models.Model):
   data_source = models.ForeignKey(Data, on_delete=models.CASCADE)
   storage_destination = models.ForeginKey(S3Bucket, on_delete=models.CASCADE)

我想要的行為是在刪除“數據”實例后,它的備份將從 S3 存儲桶中刪除(我可以通過調用像 DeleteFromS3Workflow 這樣的臨時工作流來處理這個問題,不需要 Django hack),並且在 DeleteFromS3Workflow 完成后,“備份”model 將從數據庫中刪除。 Beyond this, I want to be able to delete a "Backup" object from Django admin without invoking the Temporal workflow and directly deleting the object from the database (the thing uncustomized delete() method of the model does). 覆蓋“備份”model 上的 delete() 方法不滿足此要求,只要它在工作流完成之前刪除 model 並且此行為在兩種情況下都是相互的。

您可以編寫自己的自定義on_delete function 復制CASCADE function 但添加您的 S3 刪除。 這樣,您可以保留 model 的默認delete() function ,以便它在 Django 管理員中正常工作。

data_source = models.ForeignKey(Data, on_delete=CASCADE_S3_WORKFLOW)

如果您查看 Django 源代碼,您可以看到CASCADE的作用:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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