我有两个独立的预算和转化模型,如下所示。
class Budget(models.Model):
budget = models.FloatField(null=False, blank=False)
currency = models.ForeignKey(to=Currency, on_delete=models.PROTECT, null=False, blank=False)
date = models.DateField(null=False, blank=False, unique=False)
class Conversion(models.Model):
currency = models.ForeignKey(to=Currency, on_delete=models.PROTECT, null=False, blank=False)
rate = models.FloatField(null=True, blank=False)
date = models.DateField(null=False, blank=True, unique=False)
我想在删除对象转换之前添加一条规则。如果存在依赖转换的预算,则不应删除该转换。
关于删除django对象的文章很多,但我找不到可以接受的解决方案,它们都有缺点。
我尝试过的:
.delete()
并引发ValidationError->返回服务器错误。 @receiver(pre_delete, sender=Conversion)
并引发ValidationError->返回服务器错误.clean()
。我非常感谢一个解决方案,该解决方案可以防止用户删除Conversion对象并且不返回500错误。
谢谢
答案 0 :(得分:0)
您的问题没有道理。您说的是Conversion
对象,如果存在依赖它的Budget
对象,则不应删除。但是,当前数据库中的Conversion
和Budget
模型之间没有关系。它们都将外键引用到Currency
,但这并不直接将它们关联起来。
如果您想以某种方式链接Conversion
和Budget
,则可以使用on_delete=models.Protect
添加外键,如下所示:
class Budget(models.Model):
budget = models.FloatField(null=False, blank=False)
currency = models.ForeignKey(to=Currency, on_delete=models.PROTECT, null=False, blank=False)
date = models.DateField(null=False, blank=False, unique=False)
conversion = models.ForeignKey(to=Conversion, on_delete=models.PROTECT)
现在,尝试将Budget
指向Conversion
,然后删除该Conversion
。 Django不允许您这样做。