有没有办法检查查询集并获取有关已应用哪些过滤器/排除的信息?
我需要它来调试:我不明白为什么我的查询集排除了一些数据......
有没有办法检查查询集并获取有关已应用哪些过滤器/排除的信息?
我需要它来调试:我不明白为什么我的查询集排除了一些数据......
这似乎并不容易做到。每个过滤器都以不同的方式应用于查询对象,因此您不会找到布局干净的"filter1", "filter2", "filter3"
.
签出myqueryset.query.__dict__
- 传入的过滤器立即被分隔到相关区域,并且不存储任何记录。中的详细信息django.db.models.sql.query.Query
。
我会改为检查 SQL。
print myqueryset.query
如果您在 shell 中调试:
from django.db import connection
print connection.queries
如果您在浏览器中使用 django 调试工具栏发出请求,它是一个很棒的工具并且非常有用:
您还可以使用:
your_qs.query.where.children
或者:
your_qs._has_filters().__dict__['children']
并访问您应用的第一个过滤器:
your_qs._has_filters().__dict__['children'][0].__dict__