我有一个用queryset.filter(date__gte=datetime(2011,1,1))
准备的Django查询集
如果我再打str(queryset.query)
,我会在字符串中看到它:
... WHERE "App_table"."date" >= 2011-1-1
但是,这是无效的SQL代码,就像我在Postgresql中运行此错误一样:
... WHERE "App_table"."date" >= 2011-1-1
ERROR: operator does not exist: date >= integer
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
为什么会发生这种情况?我如何要求Django输出可以使用的适当SQL代码?
答案 0 :(得分:1)
您可以使用query. sql_with_params()
方法。
print(q.query. sql_with_params())
这将打印查询的参数化版本。
答案 1 :(得分:-2)
如果我的模型字段为models.DateField
,这就是我过滤日期的方式:
queryset.filter(date__gte=datetime.date(2011,1,1))
我想如果您将字段date
声明为DateTimeField
,那么比较就可以了。