使用Django在两个日期之间选择


116

我正在寻找一个在Django日期之间进行选择的查询。

我知道如何使用原始SQL轻松做到这一点,但是如何使用Django ORM做到这一点呢?

这是我要在查询中添加30天之间的日期的地方:

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

Answers:


230

使用__range运算符:

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))

“ created_at”是模型中的任意字段,还是数据库创建记录时的实际日志?
Bigbob556677

@ Philip556677这是模型中的任意字段。您可以将DateField的auto_now_add参数设置为True,以使其易于使用。
Benbb96 '18


1

两种方法

.filter(created_at__range=[from_date, to_date])

另一种方法

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte意味着大于等于
  • 小于等于

Q对象在第二种方法中是不必要的,您可以编写:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

如果您使用DateTimeField,则使用日期进行过滤将不包括最后一天的项目。

您需要将值转换为日期:

...filter(created_at__date__range=(start_date, end_date))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.