相关疑难解决方法(0)

Django:外键 on_delete SET_DEFAULT 行为

让我考虑以下两个模型:

class Policy(models.Model):
        name = models.SlugField(max_length=256, blank = False, unique = True)
def default_policy():
        return Policy.objects.get(name='default').pk
class Item(models.Model):
        policy = models.ForeignKey('Policy', on_delete=models.SET_DEFAULT, default=default_policy)
Run Code Online (Sandbox Code Playgroud)

除了一个操作外,一切都按预期工作。我仍然可以毫无例外地执行以下操作:

p = Policy.objects.get(name='default')
p.delete()
Run Code Online (Sandbox Code Playgroud)

这会产生孤立的Items,它们指的是“默认”Policy对象。不幸的是,此操作导致数据库中的完整性问题,因为现在有Item哪些 policy_id 列指的是Policy表的丢失记录。

我怎样才能防止这种情况发生?Policy当没有Items 指代它时删除“默认”对我来说是可以接受的。

django

2
推荐指数
1
解决办法
6939
查看次数

标签 统计

django ×1