Django: проверить набор запросов, чтобы получить примененные фильтры

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

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

Ответ №3:

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

 your_qs.query.where.children
  

или:

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

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

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