gpt4 book ai didi

python - 在不丢失数据的情况下合并和取消合并对象的最佳方式

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:22 25 4
gpt4 key购买 nike

假设我有两个表(我使用的是 Django,但这个问题主要与语言无关):

Organization(models.Model):
name = models.CharField(max_length=100)

Event(models.Model):
organization = models.ForeignKey(Organization)
name = models.CharField(max_length=100)

允许用户创建事件和组织。有可能两个不同的用户创建组织对象,这些对象应该类似于同一个真实世界的组织。当有人注意到这个问题时,他们应该能够合并这两个对象,以便只有一个组织。

我的问题是:如何合并这两个组织,以确保在用户错误合并它们时我可以“取消合并”它们?因此,删除一个组织对象并将所有事件指向另一个组织对象的简单解决方案不是一种选择。我正在寻找有关最佳实践的非常高级别的指南。

一些可能的解决方案:

  • 添加另一个表,将已“合并”的组织连接在一起,并以这种方式跟踪合并情况
  • 在 Organization 上添加一个外键字段以指向它合并的组织
  • 保留合并前所有原始对象的副本,使用类似 django-reversion 的方式。

最佳答案

就我个人而言,我会选择使用类似 django-reversion 的解决方案。但是,如果您想创建更强大且更少依赖第 3 方逻辑的内容,请将 merged_into 字段添加到 Organization 并将 merged_from 字段添加到 Event:

Organization(models.Model):
name = models.CharField(max_length=100)
merged_into = models.ForeignKey('self', null=True, blank=True)

Event(models.Model):
organization = models.ForeignKey(Organization)
name = models.CharField(max_length=100)
merged_from = models.ForeignKey(Organization null=True, blank=True)

合并时,您也可以选择更新事件。从现在开始,请务必将“merged_into”组织的所有引用重定向到新组织。

如果要允许多次合并(例如:A+B合并为C,A+C合并为D,E+F合并为G,D+G合并为H),可以每次新建一个组织实例并合并两个“ parent ”都进入其中,复制事件而不是更新它们。这使原始事件保持不变,等待回滚。这也允许一步将 2 个以上的组织合并为一个新的组织。

关于python - 在不丢失数据的情况下合并和取消合并对象的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987196/

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