Python 自定义管理器-查询抽象基类

Python 自定义管理器-查询抽象基类,python,django,django-models,Python,Django,Django Models,我已经编写了一个抽象基类,它将一些表的公共字段分组在一起。我希望能够使用管理器以相同的方式查询所有这些字段 class TemporalModel(models.Model): objects = models.Manager() today = TodayManager() time = models.DateTimeField() class Meta: abstract = True get_latest_by = 'ti

我已经编写了一个抽象基类,它将一些表的公共字段分组在一起。我希望能够使用管理器以相同的方式查询所有这些字段

class TemporalModel(models.Model):
    objects = models.Manager()
    today = TodayManager()

    time = models.DateTimeField()

    class Meta:
        abstract = True
        get_latest_by = 'time'
如上所示,这方面的一个简单示例是能够查询TemporalModel的子类(它们都有一个“time”字段)以获取当前的条目

于是我写了一封经理信:

class TodayManager(models.Manager):
    def get_query_set(self):
        now = timezone.now()
        today = datetime(now.year, now.month, now.day, tzinfo=now.tzinfo)
        tomorrow = today + timedelta(days=1)

        qs = models.Manager.get_query_set(self).filter(time >= today)
        qs = qs.filter(time < tomorrow)

        return qs
然后我希望能够调用,例如,SomeTemporalThing.today.all(),并让django在子表上执行time>=today/time<明天查找

是否可以在不将管理器定义移动到子类(这将导致重复)的情况下实现这一点


我对的阅读表明这应该是可能的,但我不知道怎么做。

你所做的应该是可能的。您看到的错误与
Manager
对象的继承无关,而是
QuerySet
filter()
函数的错误规范

而不是

qs = models.Manager.get_query_set(self).filter(time >= today)
应该是

qs = models.Manager.get_query_set(self).filter(time_gte=today)
这同样适用于您的
时间<明天
过滤器参数


看。

这部分我接受了你的答案和我是个白痴的事实。干杯,伙计:)
qs = models.Manager.get_query_set(self).filter(time_gte=today)