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