我有一个代码片段来选择表中的最后一个日期,然后执行一些逻辑来获取新的日期。这个逻辑应该放在一个django项目中?我已经看到了Fat Models的例子,其中逻辑被作为模型的一种方法,但据我所知,这只适用于一个实例。
# models.py
class PurchasesDetails(models.Model):
purchaseid = models.AutoField(primary_key=True)
effectivedate = models.DateField()
def getselecteddate(self):
lastdate = PurchasesDetails.objects.filter().aggregate(Max('effectivedate'))
lastdate = next (iter (lastdate.values()))
thisweekday = lastdate.weekday()
advancedays = 1
if thisweekday ==4:
advancedays = 3
thisdate = (lastdate + timedelta(days=advancedays))
return thisdate
答案 0 :(得分:0)
正如official docs中所述,model manager
看起来是定义此类逻辑的最佳位置
在模型上定义自定义方法以添加自定义“行级” 对象的功能。而管理方法的目的是 做“表范围”的事情,模型方法应该作用于特定的模型 实例
这是将业务逻辑保存在一个地方的有价值的技术 - 模特。
所以,例如,在你的情况下
class _DetailsManager(models.Manager):
def getselecteddate(self):
lastdate = PurchasesDetails.objects.filter().aggregate(Max('effectivedate'))
lastdate = next (iter (lastdate.values()))
thisweekday = lastdate.weekday()
advancedays = 1
if thisweekday == 4:
advancedays = 3
thisdate = (lastdate + timedelta(days=advancedays))
return thisdate
class PurchasesDetails(models.Model):
purchaseid = models.AutoField(primary_key=True)
effectivedate = models.DateField()
objects = _DetailsManager()
new_date = PurchasesDetails.objects.getselecteddate()
请阅读here专用于自定义模型管理器的特定文档。