11

有没有办法检查查询集并获取有关已应用哪些过滤器/排除的信息?

我需要它来调试:我不明白为什么我的查询集排除了一些数据......

4

3 回答 3

11

这似乎并不容易做到。每个过滤器都以不同的方式应用于查询对象,因此您不会找到布局干净的"filter1", "filter2", "filter3".

签出myqueryset.query.__dict__- 传入的过滤器立即被分隔到相关区域,并且不存储任何记录。中的详细信息django.db.models.sql.query.Query

我会改为检查 SQL。

print myqueryset.query 
于 2011-10-27T14:39:59.830 回答
2

如果您在 shell 中调试:

from django.db import connection
print connection.queries

如果您在浏览器中使用 django 调试工具栏发出请求,它是一个很棒的工具并且非常有用:

Django 调试工具栏

于 2011-10-27T14:29:15.787 回答
2

您还可以使用:

your_qs.query.where.children

或者:

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

并访问您应用的第一个过滤器:

your_qs._has_filters().__dict__['children'][0].__dict__
于 2019-03-14T11:56:49.837 回答