gpt4 book ai didi

python - Django unique_together 并将对象标记为 "deleted"

转载 作者:太空宇宙 更新时间:2023-11-03 15:29:11 25 4
gpt4 key购买 nike

我正在实现 "Marking for deletion in Django" 中讨论的第一个选项,也就是说,当一个对象不再处于事件状态时,我设置一个 bool 值将其标记为不活动。

我使用这种方法的具体原因是,尽管该对象不再处于活跃使用状态,但它仍可能在各种记录和报告输出中被引用和显示。我不希望 Django 的 ripple delete 删除旧记录。

我应该如何强制执行事件对象的唯一性?

最初,我认为我应该使用 unique_together 在数据库级别强制执行我的约束。在我删除一个对象之前,这一切正常,此时添加一个具有相同名称的新事件对象违反了唯一性要求。我可以简单地将对象重新标记为事件对象,但实际上我想要一个新对象。

我正在寻找能让我说出“当 active = True 时唯一在一起”之类的东西。我可以在模型创建代码中强制执行此操作,但似乎在数据库级别强制执行它是一个更好的主意。

关于哪一个是最好的方法有什么建议吗?有更好的建议吗?

注意:django-reversion 很酷,但完全不适用于我的应用程序,因为我确实需要不时访问“已删除”的对象。

最佳答案

你可以有一个唯一的约束:

class Meta:
unique_together = ( ('name', 'active'),)

但是,这意味着您只能有一个同名的事件对象和一个非事件对象。

如果您激活一个 NullBooleanField,那么您可以将 NULL 表示为事件的,并且 (IIRC) 具有无限数量的非事件的同名对象。至少,PostgreSQL 将 NULL 值解释为约束的一部分,因为它没有破坏约束。

关于python - Django unique_together 并将对象标记为 "deleted",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com