在 Django 中,我试图将查询过滤为仅在一天中特定时间之前创建的对象。我有一个名为“created_at”的日期时间字段,它存储创建该对象的日期时间。
我想做的是:
query = query.filter(created_at__hour__lte=10)
Run Code Online (Sandbox Code Playgroud)
我希望获得上午 10 点之前创建的所有对象。但是,当我尝试这样做时,我得到:
FieldError: Join on field 'created_at' not permitted. Did you misspell 'hour' for the lookup type?
Run Code Online (Sandbox Code Playgroud)
我可以循环遍历每一天并获取当天的对象,但这似乎效率很低。有没有办法可以在单个查询中完成此操作?如果没有,运行此类过滤器的最快方法是什么?
__houron aDateTimeField是查找类型,因此您不能将其与其他查找类型(例如__lte. 您可以使用Q对象构造一个过滤器,EG:
before_ten = Q(created_at__hour=0)
for hour in range(1, 11):
before_ten = before_ten | Q(created_at__hour=hour)
query = query.filter(before_ten)
Run Code Online (Sandbox Code Playgroud)
如果您可以更改数据模型,则节省创建时间TimeField以及现有的created_at.