归档Django模型

2024-10-01 13:33:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个在线订购系统,用于定期销售商品(蔬菜箱上门送货)。我有一个“订单”模型(简化版),如下所示:

class BoxOrder(models.Model):
    customer = models.ForeignKey(Customer)
    frequency = models.IntegerField(choices=((1, "Weekly"), (2, "Fortnightly)))
    item = models.ForeignKey(Item)
    payment_method = models.IntegerField(choices=((1, "Online"), (2, "Free)))

现在,我的“客户”可以更改订单的频率,或者“项目”(比如“胡萝卜”)正在销售,甚至可以一起删除订单。在

我想做的是创建一周内所有订单的“备份”,这样我就可以看到每周售出的所有订单的历史图表。将订单归档到另一个表/数据库的问题是,如果一个项目(比如我不再卖胡萝卜)由于某种原因被删除,那么归档的BoxOrder将因为ForeignKeys而变得无效

使用Django创建归档系统的最佳解决方案是什么?这样历史上每周的订单都可以在Django admin中查看,并且它们是“静态的”(即独立于是否删除任何其他对象)? 我考虑过创建一个新的“flat”BoxOrderArchive模型,然后使用cron作业来移动给定一周的订单,例如:

^{pr2}$

但我觉得这可能是一个额外的工作。在我走这条路之前,如果有人有其他的解决办法,那就太好了?在

谢谢


Tags: 项目django订单模型models系统历史class
2条回答

所以,经过长时间的研究,我认为对我来说最好的解决方案是创建一个对象的“平面”版本,取消对任何现有对象的引用,并将其保存在数据库中。在

原因是我的“BoxOrder”对象每周都会更改(因为客户编辑他们的地址、项目、成本等。跟踪所有这些更改非常困难。 另外,除了向网站用户显示数据外,我不需要做任何处理。在

基本上我想做的是创建一个快照,而现有的工具都不是我想要的。话虽如此,其他人可能会有不同的优先级,因此下面列出一些有用的链接:

[1]SO question regarding storing a snapshot/pickling model instances

[2]Django Simple History Docs-在每次创建/更新/删除时存储模型状态

[3]Django Reversion Docs-允许恢复模型实例

关于[2]和[3]的讨论,请参阅对Serafim回答的评论

这是一个相当宽泛的话题,我不会特别回答你的问题,但是我的建议是不要删除或移动任何东西。您可以在您的Item中添加一个名为is_deleted或{}的boolan字段,并在删除项目时使用该标志。这样你就可以了

  • 保留你的ForeignKeys
  • 对非活动项使用不同的表示法
  • 恢复和Item之前删除的内容(例如,您可能希望在几个月后再次销售胡萝卜-这样您的统计数据将在全年保持一致)

同样的建议也适用于BoxOrder模型。不要删除不同表中的行,只需添加一个is_archived字段并将其设置为True。在

相关问题 更多 >