0

我有一个模型:

PRODUCT_EXPIRY 型号:

product_id = model.IntegerField()
expires_in = model.IntegerField() --days count

另一个模型为:

产品:

product_id = model.IntegerField()
expires_in = model.IntegeField(blank=True)  --days count
name = model.CharField()
price = model.FloatField()
...other fields

我想要的是,让商店添加产品,这里expires_in的产品(天数)是可选的,他可以选择在添加产品时手动添加,或者如果他没有,则从product_expire模型输入过期时间,映射通过product_id.

但请考虑以下情况:

  1. Milk X 有 3 天的有效期。
  2. 牛奶 Y 有 60 天的保质期。
  3. 可可粉的保质期为 6 个月。

当商店输入产品时,假设他至少在生产日期后 10 天后收到它。因此expire_in,添加可可粉时应为60-10 = 50 days有效期大于 30 天的产品。由于牛奶车每天运送牛奶,因此有效期少于 30 天的产品将具有相同的有效期,没有任何变化,即为expires_in牛奶 X 添加牛奶时3 days。我该怎么做?Product模型expired_in必须是外键吗?

例如:假设我们知道可乐在 1 个月后过期,那么如果商店忘记输入过期日期,则添加的自动过期日期应为 20 天。因此,如果产品即将过期,我可以通知商店。但对于牛奶到期添加应无任何变化。
或者我是否必须通过覆盖产品模型的保存功能为此构建自定义算法?

我现在的想法是:

  • 将其保留为IntegerField并添加另一个字段为DateTime,如果输入了日期时间字段,则使用该字段,否则使用该expired_in 字段,并覆盖保存功能。
  • 稍后通过 pandas 或一些自定义 python 脚本处理空白值。但是有简单的方法吗?
4

1 回答 1

1

正如我所看到的模型应该看起来像

class Product(models.Model):
    """
    """
    class Meta:
        verbose_name = _("Procuct")
        verbose_name_plural = _("Products")
    quantity = model.IntegeField() #Imagine ther are 50 packs of coffe that have arrived today
    name = models.CharField(max_length=255, verbose_name=_("name"))
    prise = FloatField()
    expiry_date = models.DateField()
    arrived_at = models.DateField()
    status = 'not_expired'


    def __str__(self):
        return '{name} {expiry_date}'.format(name=self.name, expiry_date=self.expiry_date)

最好使用到期日期而不是 exprites_in,因为如果员工应该键入所有内容,而不是仅键入到期日期,则将更加耗时

那么如果您想检查将在接下来的 5 天到期的产品

进口日期

def checkExpiringProducts(days)
    return Products.objects.filter(status='not_expired',expiry_date__lte=date.today()+datetime.timedelta(days=days)

如果你打电话

checkExpiringProducts(5)#gives you the products that are expiring next 5 days

您应该status每天检查并检查expiry_date今天或明天是否有产品status expired

于 2018-08-07T07:23:43.380 回答