В утверждении фильтра Django, в чем разница между __exact и знаком равенства (=)? - PullRequest
20 голосов
/ 01 апреля 2012

В заявлении фильтра Django какая разница, если я напишу:

.filter(name__exact='Alex')

и

.filter(name='Alex')

Спасибо

Ответы [ 2 ]

27 голосов
/ 01 апреля 2012

Разницы нет, вторая подразумевает использование __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.
15 голосов
/ 01 апреля 2012

Вы можете посмотреть на SQL, который Django выполнит, преобразовав свойство query набора запросов в строку:

>>> 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 здесь не имеет значения.

...