其他分享
首页 > 其他分享> > 存档Django模型

存档Django模型

作者:互联网

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

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)))

现在,我的“客户”可以更改订单的频率,也可以更改正在出售的“物品”(例如“胡萝卜”),甚至可以一起删除订单.

我想做的是创建该周处理的所有订单的每周“备份”,以便我可以看到每周售出的所有订单的历史记录.仅将订单归档到另一个表/数据库中的问题是,如果由于某种原因删除了某个项目(例如我不再出售胡萝卜),则由于ForeignKeys,该归档BoxOrder将变得无效

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

class BoxOrderArchive(models.Model):
    customer_name = models.CharField(max_length=20)
    frequency = models.IntegerField()
    item_name = models.CharField() # refers to BoxOrder.item.name
    item_price = models.DecimalField(max_digits=10, decimal_places=2) # refers to BoxOrder.item.price
    payment_method = models.IntegerField()

但是我觉得这可能需要做很多额外的工作.在我走那条路之前,很高兴知道是否有人还有其他解决方案?

谢谢

解决方法:

这是一个相当广泛的主题,我不会具体回答您的问题,但是我对您的建议是不要删除或移动任何内容.您可以将布尔值字段添加到名为is_deleted或is_active或类似名称的项目中,并在删除项目时使用该标志.这样你可以

>保留您的外键,
>对于非活动项目具有不同的表示形式
>恢复并删除先前删除的商品(例如,您可能要在几个月后再次出售胡萝卜-这样,您的统计数据将在一年中保持一致)

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

标签:cron,foreign-keys,python,django
来源: https://codeday.me/bug/20191029/1963748.html