我有一个模型:
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
进行映射
但是考虑以下情况:
- 牛奶X的有效期为3天
- 牛奶Y的有效期为60天
- 可可粉的有效期为6个月
当商店输入产品时,假设他至少在生产日期后10天内收到。因此,添加可可粉时的expire_in
应为60-10 = 50 days
,即有效期大于30天的产品。由于牛奶车每天运送牛奶,因此有效期小于30天的产品的有效期将与牛奶相同,没有任何变化,即在添加牛奶expires_in
时,牛奶X将为3 days
。我该怎么做?Product
型号expired_in
必须是外键吗?
例如:假设我们知道焦炭在1个月后到期,那么如果商店忘记输入有效期,则自动添加的有效期应为20天。所以稍后我可以通知商店产品是否即将过期。但添加的牛奶有效期没有任何变化。
或者我必须通过覆盖产品模型的保存功能来为此构建一个自定义算法吗?
我现在想的是:
- 保持为CCD_ 10并添加另一个字段为CCD_,如果输入了日期-时间字段,则使用该字段,否则使用
expired_in
字段,并覆盖save函数 - 稍后通过panda或一些自定义python脚本处理空白值。但是有简单的方法吗
正如我所看到的,模型应该看起来像
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