如何在Django中使用and
子句
例如:
select Date(timestamp) from userlog where (Date(timestamp) >= "2008-01-02" and Date(timestamp) <= "2009-01-02") and ipaddress != "192.168.2.211";
Django query:
userlog.objects.filter(timestamp__range=(startdate,enddate),ipaddress !="192.168.2.211")
在上面有一个错误说non-keyword arg afterkeyword arg
,错误在上面一行
ipaddress是一个char字段,我是否构建了错误的查询,如果是这样,应如何解决
答案 0 :(得分:3)
userlog.objects.filter(timestamp__range=(startdate,enddate),ipaddress !="192.168.2.211")
在Django中使用!=
是不正确的(或者实际上,不是在Python中)。为了排除ipaddress
匹配某个值的所有记录,您应该使用exclude()
机制。
userlog.objects.filter(timestamp__range=(startdate,enddate)).exclude(ipaddress =
"192.168.2.211")
答案 1 :(得分:1)
这与and
子句无关。问题是ipaddress !="192.168.2.211"
是Django中无效的过滤器表达式。您只能 使用等号登录过滤器表达式,因为它们实际上是过滤器方法的关键字参数。
在您的情况下,您可能需要:
userlog.objects.filter(timestamp__range=(startdate,enddate)
).exclude(ipaddress="192.168.2.211")