【发布时间】:2012-04-15 07:58:48
【问题描述】:
在 Django 过滤器语句中,如果我写有什么区别:
.filter(name__exact='Alex')
和
.filter(name='Alex')
谢谢
【问题讨论】:
标签: django django-models django-orm
在 Django 过滤器语句中,如果我写有什么区别:
.filter(name__exact='Alex')
和
.filter(name='Alex')
谢谢
【问题讨论】:
标签: django django-models django-orm
没有区别,第二个暗示使用__exact。
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.
【讨论】:
您可以通过将查询集的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 在这里没有区别。
【讨论】:
这与问题不完全相同,但对某些开发人员可能有用。 它取决于 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>]>
【讨论】: