-2
>>> Entry.objects.filter(
...     headline__startswith='What'
... ).exclude(
...     pub_date__gte=datetime.now()
... ).filter(
...     pub_date__gte=datetime(2005, 1, 1)
... )

“这需要数据库中所有条目的初始查询集,添加一个过滤器,然后是一个排除项,然后是另一个过滤器。最终结果是一个查询集,其中包含标题以“什么”开头的所有条目,这些条目在 1 月 1 日之间发布、2005 年和今天。”

有人可以解释一下 __ 和 gte 在这种情况下做什么。我无法想象上述查询如何提取 2005 年 1 月 1 日和当天之间的范围,因为我们排除了 datetime.now 。我确信这与我在双下划线和 gte 方面缺少的东西有关。谢谢。

4

1 回答 1

7

__gte只是表示“大于或等于”运算符,这只是制作WHERE子句的特殊语法。还有其他,如__gt, __lt,__lte等。请参阅文档__startswith中的更多信息。

exclude()与docsfilter的引用相反:

filter(**kwargs)

返回一个新的 QuerySet,其中包含与给定查找参数匹配的对象。

exclude(**kwargs)

返回一个新的 QuerySet,其中包含与给定查找参数不匹配的对象。

因此,您提供的代码实际上是在说:

给我所有条目,其中:

  • headlineWhat和开头
  • pub_date不大于或等于当前日期并且
  • pub_date大于或等于1/1/2005

另见:

于 2013-09-09T21:10:24.660 回答