【问题标题】:Django Copy Related Data and keep them unchanged over timeDjango复制相关数据并随着时间的推移保持不变
【发布时间】:2015-10-21 12:30:16
【问题描述】:

使用 ForeignKey 关系,我希望能够复制数据并将其存储在另一个模型中。例如,想想您将如何处理过去的发票和计费服务。

发票将有一项或多项与之相关的服务以及服务的价格。服务的此价格可以/将随时间而变化 - 但与发票一起记录的服务价格应保持与创建发票时的价格相同。

我的第一个想法是从结果数据创建一个 pdf 并存储它。但这会使数据有些不可访问。

是否有某种方法可以复制数据并保持可访问性?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    这是一个非常广泛的问题,需要多种解决方案。我不认为你的目标是正确的。

    保存发票的一条规则是,发票永远不会改变。您永远不应该更新发票。因此,不仅您的发票“副本”应保持不变,原件也应保持不变。

    此外,您应该有一个 InvoiceItem(或 InvoiceRow)模型,它们是您发票上的项目。不要直接将产品绑定到发票。

    这是我使用过的两种解决方案:

    解决方案 1

    您可以规范化发票(项目)上的数据。所以,不要使用外键,而是规范化有关产品的所有数据,因此产品信息(包括价格)保存在发票(项目)中。

    解决方案 2

    提供您的产品修订号。因此,每次更新产品(例如名称或价格更改)时,都会在数据库中创建一个新产品。现在您可以将 InvoiceItem 链接到具有外键的产品,这将是历史准确的。

    我确信有一些创建发票后端的指南/最佳做法。语言或框架并不重要。发票真的很重要,所以在开始构建之前做很多研究。那只是我的两便士

    【讨论】:

    • 是的,它相当广泛 - 但我认为这是一个常见问题。把它放在 /programmers/ 会更好吗?
    • 我认为这个问题确实是一个更好的地方。但是,正如您所提到的,这确实是一个普遍的问题。我怀疑以前没有人问过这个问题,或者写过一篇很好的博文;)
    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多