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

dar*_*rse 1 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
Run Code Online (Sandbox Code Playgroud)

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

但是,如何使用此查询来获取仅包含最近7天发布的文章的查询集?

提前致谢!

Bur*_*lid 5

您需要一个可在整个模型中工作的自定义模型管理器。在模型类内部定义的函数仅适用于模型实例

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
Run Code Online (Sandbox Code Playgroud)

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

Article.published_last_week.all()
Run Code Online (Sandbox Code Playgroud)