我正在创建一个在线订购系统,用于定期销售商品(蔬菜箱上门送货)。我有一个“订单”模型(简化版),如下所示:
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作业来移动给定一周的订单,例如:
但我觉得这可能是一个额外的工作。在我走这条路之前,如果有人有其他的解决办法,那就太好了?在
谢谢
所以,经过长时间的研究,我认为对我来说最好的解决方案是创建一个对象的“平面”版本,取消对任何现有对象的引用,并将其保存在数据库中。在
原因是我的“BoxOrder”对象每周都会更改(因为客户编辑他们的地址、项目、成本等。跟踪所有这些更改非常困难。 另外,除了向网站用户显示数据外,我不需要做任何处理。在
基本上我想做的是创建一个快照,而现有的工具都不是我想要的。话虽如此,其他人可能会有不同的优先级,因此下面列出一些有用的链接:
[1]SO question regarding storing a snapshot/pickling model instances
[2]Django Simple History Docs-在每次创建/更新/删除时存储模型状态
[3]Django Reversion Docs-允许恢复模型实例
关于[2]和[3]的讨论,请参阅对Serafim回答的评论
这是一个相当宽泛的话题,我不会特别回答你的问题,但是我的建议是不要删除或移动任何东西。您可以在您的}的boolan字段,并在删除项目时使用该标志。这样你就可以了
Item
中添加一个名为is_deleted
或{ForeignKey
sItem
之前删除的内容(例如,您可能希望在几个月后再次销售胡萝卜-这样您的统计数据将在全年保持一致)同样的建议也适用于
BoxOrder
模型。不要删除不同表中的行,只需添加一个is_archived
字段并将其设置为True
。在相关问题 更多 >
编程相关推荐