如何输出Django管理员生成的SQL来查询dhangelist页面的结果?我尝试通过以下方式覆盖queryset()
:
def queryset(self, *args, **kwargs):
qs = super(MyAdmin, self).queryset(*args, **kwargs)
print 'sql:',qs.query
return qs
但即使我浏览/admin/myapp/mymodel/?segment=123&date=2012-1-1
,也会显示查询:
sql: SELECT myapp_mymodel.id, myapp_mymodel.segment, myapp_mymodel.start_date
FROM myapp_mymodel ORDER BY myapp_mymodel.start_date ASC
请注意我完全没有在网址中指定的任何过滤器。
我试图调试一个奇怪的问题,如果我在SQL中手动查询表,我会看到一个结果,但Django的管理员显示的是完全不同的东西。我怀疑Django中存在导致生成错误SQL的错误,但我需要看到SQL来确认问题是什么。
我正在使用Django 1.5。
答案 0 :(得分:5)
您只需在settings.py中设置此日志记录配置,即可在控制台上打印所有SQL查询
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG'
},
}
}
这是负责打印的部分
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG'
},
答案 1 :(得分:3)
我使用debug_toolbar:https://pypi.python.org/pypi/django-debug-toolbar
检查出来。这是值得的。