Django: проверить набор запросов, чтобы получить примененные фильтры
Есть ли способ проверить набор запросов и получить информацию о том, какие фильтры / исключение были применены?
Мне это нужно для отладки: я не могу понять, почему мой набор запросов исключает некоторые данные...
2 ответа
Это не так легко сделать. Каждый фильтр применяется к объекту запроса по-разному, поэтому вы не найдете "filter1", "filter2", "filter3"
,
Проверять, выписываться myqueryset.query.__dict__
- входящий фильтр сразу разделяется на соответствующие области, и запись не сохраняется. Подробности в django.db.models.sql.query.Query
,
Я бы проверил SQL вместо этого.
print myqueryset.query
Вы также можете использовать:
your_qs.query.where.children
или же:
your_qs._has_filters().__dict__['children']
и получить доступ к первому фильтру, который вы применили:
your_qs._has_filters().__dict__['children'][0].__dict__
Если вы отлаживаете в оболочке:
from django.db import connection
print connection.queries
Если вы делаете запросы в браузере, используйте панель отладки django, это отличный инструмент и может быть очень полезным: