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天发布的文章的查询集?
提前致谢!
您需要一个可在整个模型中工作的自定义模型管理器。在模型类内部定义的函数仅适用于模型实例。
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)