如何输出Django Admin生成的SQL

Cer*_*rin 0 python django django-orm

如何输出Django管理员正在生成的SQL来查询dhangelist页面的结果?我尝试queryset()通过以下方法覆盖:

def queryset(self, *args, **kwargs):
    qs = super(MyAdmin, self).queryset(*args, **kwargs)
    print 'sql:',qs.query
    return qs
Run Code Online (Sandbox Code Playgroud)

但是即使我正在浏览/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
Run Code Online (Sandbox Code Playgroud)

请注意,完全没有我在URL中指定的任何过滤器。

我正在尝试调试一个奇怪的问题,即如果我手动查询SQL中的表,会看到一个结果,但是Django的管理员显示的是完全不同的东西。我怀疑Django中有一个错误会导致生成错误的SQL,但是我需要查看SQL来确认这是问题所在。

我正在使用Django 1.5。

glo*_*wka 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'
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

这是负责打印的部分

       'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG'
        },
Run Code Online (Sandbox Code Playgroud)