Django: проверить набор запросов, чтобы получить примененные фильтры - PullRequest
8 голосов
/ 27 октября 2011

Есть ли способ проверить набор запросов и получить информацию о том, какие фильтры / исключения были применены?

Мне это нужно для отладки: я не могу понять, почему мой набор запросов исключает некоторые данные ...

Ответы [ 3 ]

7 голосов
/ 27 октября 2011

Это не так просто сделать.Каждый фильтр применяется по-разному к объекту запроса, поэтому вы не найдете четко выложенного "filter1", "filter2", "filter3".

Checkout myqueryset.query.__dict__ - входящий фильтр сразу разделяется на соответствующие области и запись не сохраняется,Подробности в django.db.models.sql.query.Query.

Я бы вместо этого проверил SQL.

print myqueryset.query 
2 голосов
/ 27 октября 2011

Если вы отлаживаете в оболочке:

from django.db import connection
print connection.queries

Если вы делаете запросы в браузере, используйте django debug toolbar, это отличный инструмент и может быть очень полезным:

Панель инструментов отладки Django

1 голос
/ 14 марта 2019

Вы также можете использовать:

your_qs.query.where.children

или:

your_qs._has_filters().__dict__['children']

и для доступа к первому примененному фильтру:

your_qs._has_filters().__dict__['children'][0].__dict__
...