Python Django:make_aware期望一个天真的日期时间
我开始做一个用Django构建的项目,但我想不出什么 我的settings.py中有: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
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重建它就解决了这个问题