13

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
4

4 回答 4

20

来自文档: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')
于 2012-10-09T18:44:57.427 回答
2

您可以实现您的日志格式化程序,并使用traceback.print_exception().

请参阅FormatException上的 Fomatter 文档

您也可以参考这个,当我告诉它时,如何使用 Django 的记录器来记录回溯?

于 2012-07-19T09:09:51.323 回答
-2

这意味着您在 django 中启用了时区支持;但是您向它传递了一个没有附加任何时区信息的日期时间对象。

如果你想要 django 的时区支持,那么使用的 datetime 对象应该是时区感知的。

关于时区支持的文档提供了一种将您的日期时间对象转换为带有 timzeones 的方法。

于 2012-07-19T11:40:07.457 回答
-3

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
于 2012-07-19T08:52:30.380 回答