Python Django:make_aware期望一个天真的日期时间

Python Django:make_aware期望一个天真的日期时间,python,django,datetime,django-models,timezone,Python,Django,Datetime,Django Models,Timezone,我开始做一个用Django构建的项目,但我想不出什么 我的settings.py中有: TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True 在my models.py中,我有如下日期字段: #... date = models.DateTimeField(default=timezone.now) created_at = models.DateTimeField(auto_now_add=True) updat

我开始做一个用Django构建的项目,但我想不出什么

我的settings.py中有:

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
在my models.py中,我有如下日期字段:

#...
date = models.DateTimeField(default=timezone.now)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
#...
我的URL在URL.py中的定义如下:

urlpatterns = patterns(
    '',
    url(r'^api/catalog/', include('catalog.urls')),
    url(r'^api/logs/', include('logs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)
在catalog/url.py中:

urlpatterns = patterns(
    '',
    url(r'^api/catalog/', include('catalog.urls')),
    url(r'^api/logs/', include('logs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)
router = DefaultRouter(trailing_slash=False)
router.register(r'users', UserViewSet)
# ...
projects_router = NestedSimpleRouter(router, r'projects', lookup='project', trailing_slash=False)
projects_router.register(r'requests', ProjectRequestViewSet, base_name='project-requests')
# ...
requests_router = NestedSimpleRouter(router, r'requests', lookup='request', trailing_slash=False)
requests_router.register(r'statuses', RequestStatusViewSet, base_name='request-statuses')
# ...
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^', include(projects_router.urls)),
    url(r'^', include(requests_router.urls)),
    url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^token-auth', views.obtain_auth_token),
]
由于我已经更新到Django 1.9.1,我有以下警告:

.\env\lib\site packages\django\template\utils.py:37:

RemovedIndjango110警告:您尚未定义模板设置。 您必须在升级到Django 1.10之前执行此操作。否则Django会 无法加载模板。“无法加载模板。”, 已删除的Indjango(警告)

.\balrog\url.py:8:removedIndjango110警告:

django.conf.urls.patterns()已弃用,将在中删除 Django 1.10。将您的urlpatterns更新为 改为django.conf.urls.url()实例。url(r“^admin/”, 包括(admin.site.url))

(这不是这个问题的重点,但我们也非常感谢您为消除这些警告提供的任何帮助。)

每当我试图用API获取带有日期字段的对象时,我都会遇到以下错误:

ValueError:make_aware期望一个简单的日期时间,获得2016-01-15 17:18:44.258843+00:00

因此,如果
USE_TZ
设置为
False
,则不会发生此错误,但这并不理想,我需要将其设置为
True

删除此错误的另一种方法是编辑
\env\Lib\site packages\django\utils\timezone.py
并更改此make_aware功能:

def make_aware(value, timezone=None, is_dst=None):
    """
    Makes a naive datetime.datetime in a given time zone aware.
    """
    if timezone is None:
        timezone = get_current_timezone()
    if hasattr(timezone, 'localize'):
        # This method is available for pytz time zones.
        return timezone.localize(value, is_dst=is_dst)
    else:
        # Check that we won't overwrite the timezone of an aware datetime.
        if is_aware(value):
            raise ValueError(
                "make_aware expects a naive datetime, got %s" % value)
        # This may be wrong around DST changes!
        return value.replace(tzinfo=timezone)
为此:

def make_aware(value, timezone=None, is_dst=None):
    """
    Makes a naive datetime.datetime in a given time zone aware.
    """
    if timezone is None:
        timezone = get_current_timezone()
    if hasattr(timezone, 'localize'):
        # This method is available for pytz time zones.
        return timezone.localize(value, is_dst=is_dst)
    else:
        return value
但这也不理想

为什么我的make_-aware函数甚至被调用,因为日期应该已经被感知,并且在
USE_-TZ
设置为
True
时不是幼稚的


顺便说一句,我正在使用一个SQLite数据库,以防它是相关的(因为SQLite使用日期字段作为字符串afaik)

好的,事实上,因为我数据库中的一些日期是手动插入为字符串的,SQLite没有起到任何作用,擦除数据库并使用Django ORM重建它解决了这个问题。

好的,事实上,因为数据库中的某些日期是以字符串的形式手动插入的,而SQLite并没有起到任何作用,所以清除数据库并使用Django ORM重建它就解决了这个问题