如何使用Django中的函数过滤查询集?

时间:2015-09-06 16:37:46

标签: django django-models

我的模型设置如下:

class Article(models.Model):
    published_date = models.DateTimeField(defualt = timezone.now())
    .....
    def was_published_in_last_week(self):
        now = timezone.now()
        return now - datetime.timedelta(days = 7) <= self.published_date <= now

该功能检查文章是否在过去7天内发布,并且工作正常。

但是,我如何使用它来获取包含仅在过去7天内发布的文章的查询集?

提前致谢!

1 个答案:

答案 0 :(得分:4)

您需要一个适用于该模型的custom model manager。您在模型类中定义的函数仅适用于模型实例

使用模型类时,您已经在使用默认模型管理器 use utf8; use Encode; # .. binmode (STDOUT, ":encoding(utf8)"); ;您只需使用自定义过滤器编写另一个。

objects

现在,您可以执行以下操作:

# First, define a manager subclass
class PublishedLastWeekManager(models.Manager):
    def get_queryset(self):
        now = timezone.now()
        start = now - datetime.timedelta(days=7)
        return super(PublishedLastWeekManager, self).get_queryset().filter(published_date__range=[start, now])

class Article(models.Model):

    objects = models.Manager() # The default manager.
    published_last_week = PublishedLastWeekManager() # New manager