我的模型如下:
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
进行映射。
但是考虑以下情况:
当商店输入产品时,假设他至少从生产日期起10天后得到了产品。因此,添加可可粉的expire_in
应该是60-10 = 50 days
,即产品的有效期超过30天。在牛奶车每天交付牛奶的地方,有效期少于30天的产品将具有相同的有效期,而不会发生任何变化,即,为牛奶X添加牛奶expires_in
将是3 days
。我该怎么办? Product
模型expired_in
是否必须是外键?
例如:假设我们知道可乐会在1个月后到期,那么如果商店忘记输入有效期,则自动添加的有效期应为20天。因此,稍后我可以通知商店产品是否即将过期。但是,对于牛奶,添加的有效期将保持不变。
还是我必须通过重写产品模型的保存功能为此构建自定义算法?
我现在在想的是:
IntegerField
,并添加另一个字段为DateTime
,
如果输入了日期时间字段,则使用该字段,否则使用expired_in
字段,并覆盖保存功能。答案 0 :(得分: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,因为如果员工应该键入allthin,则将花费更多的时间,而不仅仅是输入到期日期
然后,如果您要检查即将在接下来的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