【问题标题】:django query using and clause使用and子句的django查询
【发布时间】:2011-04-11 14:08:55
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这与and 子句无关。问题是 ipaddress !="192.168.2.211" 在 Django 中是一个无效的过滤器表达式。您可以在过滤器表达式中使用等号,因为它们实际上是过滤器方法的关键字参数。

    在您的情况下,您可能需要这样做:

    userlog.objects.filter(timestamp__range=(startdate,enddate)
                          ).exclude(ipaddress="192.168.2.211")
    

    【讨论】:

      【解决方案2】:
      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")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        • 1970-01-01
        • 1970-01-01
        • 2017-09-26
        • 2021-09-15
        • 1970-01-01
        相关资源
        最近更新 更多