Django给了我一些运行时警告(关于我没有写的代码(。
我怎样才能让 Django 给我一个堆栈跟踪,这样我就能看到是什么导致了这些?
/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py:808:
RuntimeWarning: DateTimeField received a naive datetime (2012-07-19 09:36:16.161479)
while time zone support is active.
RuntimeWarning
来自文档: https://docs.djangoproject.com/en/stable/topics/i18n/timezones/#code
在开发过程中,可以将此类警告转换为异常,并通过将以下内容添加到设置文件来获取回溯:
import warnings
warnings.filterwarnings(
'error', r"DateTimeField .* received a naive datetime",
RuntimeWarning, r'django.db.models.fields')
您可以实现您是日志格式化程序,并使用 traceback.print_exception()
在日志中重新跟踪警告消息。
请参阅 FormatException 中的 Fomatter 文档
你也可以参考这个,当我告诉它时,如何使用 Django 的记录器来记录回溯?
这意味着你在 django 中启用了时区支持;但是你给它传递了一个 datetime 对象,该对象没有任何时区信息附加到它。
如果你想要 django 的时区支持,那么使用的日期时间对象应该是时区感知的。
有关时区支持的文档提供了一种将日期时间对象转换为带有 timzeones 的对象的方法。
Django 的源代码告诉你刚刚发生了什么:
def get_prep_value(self, value):
value = self.to_python(value)
if value is not None and settings.USE_TZ and timezone.is_naive(value):
# For backwards compatibility, interpret naive datetimes in local
# time. This won't work during DST change, but we can't do much
# about it, so we let the exceptions percolate up the call stack.
warnings.warn(u"DateTimeField received a naive datetime (%s)"
u" while time zone support is active." % value,
RuntimeWarning)
default_timezone = timezone.get_default_timezone()
value = timezone.make_aware(value, default_timezone)
return value