Python Django时区不知道日期时间字段错误
我的博客应用程序中有一个简单的帖子模型,如下所示:Python Django时区不知道日期时间字段错误,python,django,Python,Django,我的博客应用程序中有一个简单的帖子模型,如下所示: class Post(CreateUpdateDateModel): # ... body = models.TextField() publish = models.DateTimeField() # ... def get_absolute_url(self): print(self.publish) # printing publish date return re
class Post(CreateUpdateDateModel):
# ...
body = models.TextField()
publish = models.DateTimeField()
# ...
def get_absolute_url(self):
print(self.publish) # printing publish date
return reverse(
'blog:post_detail',
args=(
self.publish.year,
self.publish.month,
self.publish.day,
self.slug
)
)
在my settings.py中,我有:
TIME_ZONE = 'Asia/Kolkata'
USE_TZ = True
我正在使用Django Admin创建Post实例。Django管理员显示/显示正确的时间(当地时间,3月10日)。在get_absolute\u url
方法中打印发布日期显示2018-03-09 19:54:29+00:00
(3月9日)。这会导致在访问帖子时生成错误的url,从而导致错误:DoesNotExist at/blog/2018/3/9/third blog normal/
请提供帮助或提示以解决此问题。要根据服务器的本地时间生成绝对url,输入到
get\u absolute\u url()
的时间必须在其本地时区内:
from django.utils.timezone import localtime
class Post(CreateUpdateDateModel):
# ...
body = models.TextField()
publish = models.DateTimeField()
# ...
def get_absolute_url(self):
local_publish = localtime(self.publish)
return reverse(
'blog:post_detail',
args=(
local_publish.year,
local_publish.month,
local_publish.day,
self.slug
)
)
这里真正的教训是,不管他们的名字如何,仍然要设置
USE_TZ
和时区。每当Django从数据库检索datetime时,它都会丢失其时区。url中与/blog/2018/3/9/third blog normal/
相对应的条目是什么?在将错误的日期转换为url之前,您是否考虑过将self.publish
转换为?它指的是2018/3/10创建的Post
实例。@Brian,这样做很有效。使用local\u publish\u date=localtime(self.publish)
将self.publish转换为本地时间,然后通过年、月、日发布详细的url。非常感谢,我想我会写一个正确的答案:)