django查询使用和子句

时间:2010-09-13 09:50:39

标签: django django-models django-views django-queryset

如何在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字段,我是否构建了错误的查询,如果是这样,应如何解决

2 个答案:

答案 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")