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, это отличный инструмент и может быть очень полезным:

Django Debug Toolbar

Другие вопросы по тегам