我的模型设置如下:
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天内发布的文章的查询集?
提前致谢!
答案 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