Python 在Django项目中,在何处放置与实例无关的模型相关逻辑

Python 在Django项目中,在何处放置与实例无关的模型相关逻辑,python,django,business-logic,Python,Django,Business Logic,我有一个代码片段来选择表中的最后一个日期,然后执行一些逻辑来获得一个新的日期。在django项目中,这种逻辑应该放在哪里?我见过一些Fat模型的例子,其中逻辑被作为模型的一种方法,但据我所知,这只适用于一个实例 # models.py class PurchasesDetails(models.Model): purchaseid = models.AutoField(primary_key=True) effectivedate = models.DateField()

我有一个代码片段来选择表中的最后一个日期,然后执行一些逻辑来获得一个新的日期。在django项目中,这种逻辑应该放在哪里?我见过一些Fat模型的例子,其中逻辑被作为模型的一种方法,但据我所知,这只适用于一个实例

# 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
如中所述,
模型管理器
看起来是定义此类逻辑的最佳位置

在模型上定义自定义方法以添加自定义“行级别” 将功能添加到对象中。而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()
请阅读专门用于自定义模型管理器的特定文档。

如中所述,模型管理器似乎是定义此类逻辑的最佳位置

在模型上定义自定义方法以添加自定义“行级别” 将功能添加到对象中。而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()

请阅读专门用于定制模型管理器的特定文档。

也许在?也许在?谢谢品夏。class\u DetailsManager(models.Model)应该是class\u DetailsManager(models.Manager)吗?此外,我还收到一个错误,即当我在模型中引用它时,_DetailsManager未定义。是的,很抱歉,我在家拍摄,我没有完全完成编辑。关于
未定义的
它真的很奇怪,它在我的代码中起作用。如果您认为我的答案正确地解决了您的问题,并且比其他答案更好,请将其标记为已接受。谢谢你,谢谢你,品夏。class\u DetailsManager(models.Model)应该是class\u DetailsManager(models.Manager)吗?此外,我还收到一个错误,即当我在模型中引用它时,_DetailsManager未定义。是的,很抱歉,我在家拍摄,我没有完全完成编辑。关于
未定义的
它真的很奇怪,它在我的代码中起作用。如果您认为我的答案正确地解决了您的问题,并且比其他答案更好,请将其标记为已接受。非常感谢。