【问题标题】:In Django filter statement what's the difference between __exact and equal sign (=)?在 Django 过滤器语句中,__exact 和等号 (=) 有什么区别?
【发布时间】:2012-04-15 07:58:48
【问题描述】:

在 Django 过滤器语句中,如果我写有什么区别:

.filter(name__exact='Alex')

.filter(name='Alex')

谢谢

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    没有区别,第二个暗示使用__exact。

    来自documentation

    For example, the following two statements are equivalent:
    >>> Blog.objects.get(id__exact=14)  # Explicit form
    >>> Blog.objects.get(id=14)         
    # __exact is implied This is for convenience, because exact 
    # lookups are the common case.
    

    【讨论】:

      【解决方案2】:

      您可以通过将查询集的query 属性转换为字符串来查看 Django 将执行的 SQL:

      >>> from django.contrib.auth.models import User
      >>> str(User.objects.filter(username = 'name').query)
      'SELECT ... WHERE `auth_user`.`username` = name '
      >>> str(User.objects.filter(username__exact = 'name').query)
      'SELECT ... WHERE `auth_user`.`username` = name '
      

      所以__exact 在这里没有区别。

      【讨论】:

        【解决方案3】:

        这与问题不完全相同,但对某些开发人员可能有用。 它取决于 Django 数据库和排序规则。我正在使用 mysql db 和 ci(不区分大小写)排序规则,结果很奇怪。

        如果有用户“测试”,最后用空格查询

        In  : User.objects.filter(username__iexact="Test ")
        Out : <QuerySet []>
        
        In  : User.objects.filter(username__exact="Test ")
        Out : <QuerySet [<User: Test>]>
        
        In  : User.objects.filter(username="Test ")
        Out : <QuerySet [<User: Test>]>
        

        【讨论】:

          猜你喜欢
          • 2016-03-05
          • 1970-01-01
          • 2019-05-01
          • 2011-09-23
          • 2019-05-01
          • 2019-02-11
          • 2015-04-18
          • 2019-03-12
          • 2012-03-31
          相关资源
          最近更新 更多