>>> Entry.objects.filter(
... headline__startswith='What'
... ).exclude(
... pub_date__gte=datetime.now()
... ).filter(
... pub_date__gte=datetime(2005, 1, 1)
... )
“这将获取数据库中所有条目的初始QuerySet,添加过滤器,然后排除,然后添加另一个过滤器。最终结果是一个QuerySet,其中包含标题以”What“开头的所有条目,这是在2005年1月1日和当天之间发布的。“
有人可以解释一下__和gte这个词在这个上下文中的作用。我无法想象上面的查询如何提取2005年1月1日和当前日期之间的范围,因为我们排除了datetime.now。我确信它与我在双重下划线和gte中缺少的东西有关。感谢。
答案 0 :(得分:3)
__gte
只是表示“大于或等于”运算符,这只是制作WHERE
子句的特殊语法。还有其他内容,例如__gt
,__lt
,__lte
,__startswith
等。请参阅documentation中的详细信息。
exclude()
与filter
正好相反,引自docs:
filter(**kwargs)
返回包含匹配对象的新QuerySet 给定的查找参数。
exclude(**kwargs)
返回一个新的QuerySet,其中包含与给定查找参数不匹配的对象。
所以,您提供的代码实际上是在说:
给我所有条目,其中:
headline
以What
和pub_date
不大于或等于当前日期和pub_date
大于或等于1/1/2005
另见: