解决这个问题的外科手术方法是创建一个日志过滤器这只会过滤掉明确指定要静音的警告。你知道:
错误永远不应该悄无声息地过去。
除非明确沉默。
考虑到这一点,这是我的过滤机械,全部都在settings.py
(无论如何现在):
MY_IGNORED_WARNINGS = {
'RemovedInDjango18Warning: `PublisherManager.get_query_set`',
'RemovedInDjango18Warning: `PageManager.get_query_set`',
'RemovedInDjango18Warning: `CMSChangeList.get_query_set`',
'form PagePermissionInlineAdminForm needs updating',
'form ViewRestrictionInlineAdminForm needs updating',
'form PageUserForm needs updating',
'/cms/admin/placeholderadmin.py:133: RemovedInDjango18Warning: Options.module_name has been deprecated',
'/cms/admin/settingsadmin.py:28: RemovedInDjango18Warning: Options.module_name has been deprecated',
'/cms/admin/pageadmin.py:111: RemovedInDjango18Warning: Options.module_name has been deprecated',
'RemovedInDjango18Warning: `PagePermissionInlineAdmin.queryset',
'RemovedInDjango18Warning: `ViewRestrictionInlineAdmin.queryset`',
'RemovedInDjango18Warning: `PageUserAdmin.queryset`',
}
def filter_djangocms_warnings(record):
for ignored in MY_IGNORED_WARNINGS:
if ignored in record.args[0]:
return False
return True
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'filters': {
'ignore_djangocms_warnings': {
'()': 'django.utils.log.CallbackFilter',
'callback': filter_djangocms_warnings,
},
},
'loggers': {
'py.warnings': {
'handlers': ['console', ],
'filters': ['ignore_djangocms_warnings', ],
}
},
}
我想它可以进一步完善......有什么想法吗?
何必呢?
其一,我现在可以(再次)使用Django bash 自动完成 https://github.com/django/django/blob/master/extras/django_bash_completion每次我按 [tab] 时,都不会出现一堆警告回响。
另外,现在我没有来自 DjangoCMS 的 20 多个警告,我实际上可以看到来自我自己的代码的警告并修复它。