Django(博客系统):按照时间分层筛选“/blog/article/?create_time__year=2017”,出现问题:Database returned an invalid datetime value. Are time zone definitions for your database installed?

问题背景

添加文章时间没问题,但为了设定博客文章按照时间分层筛选(创建时间的年份、年月&月份来搜索文章),我在blog这个django app的admin.py的ArticleAdmin类中做了如下设置:

date_hierarchy = ‘create_time‘                      # 详细时间分层筛选

models.Article中create_time定义如下:

create_time = models.DateTimeField(u‘创建时间‘, auto_now_add=True)

设置后,后台呈现效果:

按照时间按分层筛选时,出现了错误:

ValueError at /admin/blog/article/
Database returned an invalid datetime value. Are time zone definitions for your database installed?
Request Method:    GET
Request URL:    http://127.0.0.1:8800/admin/blog/article/?create_time__year=2017
Django Version:    1.11.5
Exception Type:    ValueError
Exception Value:
Database returned an invalid datetime value. Are time zone definitions for your database installed?
Exception Location:    C:\Python27\lib\site-packages\django\db\models\functions\datetime.py in convert_value, line 198
Python Executable:    C:\Python27\python.exe
Python Version:    2.7.13
Python Path:
[‘E:\\Work\\django\\myblog\\apps‘,
 ‘E:\\Work\\django\\myblog‘,
 ‘E:\\Work\\django\\myblog‘,
 ‘E:\\Work\\django\\myblog\\apps‘,
 ‘C:\\Windows\\system32\\python27.zip‘,
 ‘C:\\Program Files\\VisualSVN Server\\bin‘,
 ‘C:\\Program Files\\VisualSVN Server\\PythonPackages‘,
 ‘C:\\Python27\\DLLs‘,
 ‘C:\\Python27\\lib‘,
 ‘C:\\Python27\\lib\\plat-win‘,
 ‘C:\\Python27\\lib\\lib-tk‘,
 ‘C:\\Python27‘,
 ‘C:\\Python27\\lib\\site-packages‘]
Server time:    星期三, 27 九月 2017 15:01:23 +0800

问题解决方案

首先需要确认数据的时区设置没有问题,这里使用的是mysql数据库,时区设置如下(都是依赖计算机系统的时区):

mysql> show variables like ‘%time_zone%‘;
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone |        |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set, 1 warning (0.01 sec)

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2017-09-27 14:59:19 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

mysql>

其次,修改django project下的settings.py中市区配置信息:

# LANGUAGE_CODE = ‘en-us‘
# TIME_ZONE = ‘UTC‘
LANGUAGE_CODE = ‘zh-hans‘
TIME_ZONE = ‘Asia/Shanghai‘

USE_I18N = True

USE_L10N = True

#USE_TZ = True
USE_TZ = False

备注:

1)为了汉化设置了本地语言编码为LANGUAGE_CODE=‘zh-hans’,注意我这里是django1.11.1版本,如果是django1.8之前的版本不是这么设置了的而是LANGUAGE_CODE = ‘zh-cn‘

2)时区默认设置是‘UTC’,我这里为了和本地一样我设置为‘Asia/Shanghai’

3)默认USE_TZ=True,这也是问题的关键,直接修改为USE_TZ=False

使用USE_TZ = True,需要注意问题:

参考:http://blog.csdn.net/w6299702/article/details/38782607

启用 USE_TZ = True 后,处理时间方面,有两条 “黄金法则”:

  1. 保证存储到数据库中的是 UTC 时间;
  2. 在函数之间传递时间参数时,确保时间已经转换成 UTC 时间;

比如,通常获取当前时间用的是:

import datetime
now = datetime.datetime.now()

启用 USE_TZ = True 后,需要写成:

import datetime
from django.utils.timezone import utc
utcnow = datetime.datetime.utcnow().replace(tzinfo=utc)

模板

除非应用支持用户设置自己所在的时区,通常我们不需要关心模板的时区问题。模板在展示时间的时候,会使用 settings.TIME_ZONE 中的设置自动把 UTC 时间转成 settings.TIME_ZONE 所在时区的时间渲染。

TIME_ZONE = ‘Asia/Shanghai‘
时间: 2024-10-05 04:41:21

Django(博客系统):按照时间分层筛选“/blog/article/?create_time__year=2017”,出现问题:Database returned an invalid datetime value. Are time zone definitions for your database installed?的相关文章

web开发-Django博客系统

项目界面图片预览 项目代码github地址 项目完整流程 项目流程: 1 搞清楚需求(产品经理) (1) 基于用户认证组件和Ajax实现登录验证(图片验证码) (2) 基于forms组件和Ajax实现注册功能 (3) 设计系统首页(文章列表渲染) (4) 设计个人站点页面 主要是orm查询 (5) 文章详情页 (6) 实现文章点赞功能 (7) 实现文章的评论 ---文章的评论 ---评论的评论 (8) 富文本编辑框和防止xss攻击 (9) 密码修改 2 设计表结构 用户信息表 个人站点表 个人文

Django(博客系统):重写了auth.User后使用createsupperuser出错解决办法

背景:重写django的系统User后,使用createsupperuser创建用户失败 由于项目需要扩展django默认新的auth.User系统(添加两个字段:头像.简介等字段),因此就重写了django的默认User类,重写后使用createsupperuser死活创建不了supperuser,提示以下错误: E:\Work\django\myblog>manage.py createsuperuser --username=joe --email=[email protected] le

Django开发博客系统(01-前言与需求分析)

原本是跟着视频学,无奈发现视频中用到的资源找不到,于是自己买了本书来进行学习,贴上JD链接.<Django企业开发实战> 我的开发环境是win10+python3.8+django3.0.4,而书上是在linux环境下进行开发的,= =(汗),先这样学下去吧,毕竟面向百度编程.写博客也是为了督促一下自己,毕竟在家里宅着容易学着学着就玩手机去了.. 书前面还有一些入门知识,这里我就直接跳到做项目的部分了. 目标是开发一个博客系统, 需求分析: 简单来说,博客分为两个部分:读者访问部分(用户端)和

开源分享:用Python开发的开源博客系统Blog_mini

本博文在51CTO技术博客首发. 开源不易,Python良心之作,真心送给广大朋友,恳请给予支持,不胜感激! 0.Blog_mini送给你们:让每个人都轻松拥有可管理的个人博客 你从未架设过服务器或网站,希望可以接触一下这方面的知识-- 你从未使用过Linux操作系统,希望可以接触一下这方面的知识-- 你是初中生/高中生/大学生,希望能在学业之余锻炼一下自己的IT技能-- 你是Python新手,希望能有一个用Python开发的个人博客-- 你学习Python许久,希望有一个开源的项目可以用来学习

博客系统需求分析和表结构设计

一.项目流程 1.搞清楚需求(产品经理) (1)基于用户认证组件和Ajax实现登录验证(图片验证码) (2)基于forms组件和Ajax实现注册功能 (3)设计系统首页(文章列表渲染) (4)设计个人站点页面(跨表查询.分组查询) (5)文章详情页 (6)实现文章点赞功能(Ajax) (7)实现文章评论功能:涉及文章的评论和评论的评论 (8)富文本编辑框和防止xss攻击 2.设计博客园表结构 from django.db import models # Create your models he

Django——博客项目

博客项目 目前的目标是构建一个基于Django的前后端完整的博客系统,首先对项目流程整理如下: 1. 分析需求 1.1. 1.基于用户认证组件和Ajax实现登录验证 1.2. 基于forms组件和Ajax实现注册功能 1.3. 设计系统首页(文章列表渲染) 1.4. 设计个人站点页面 1.5. 文章详情页 1.6. 实现文章点赞功能 1.7. 实现文章的评论 1.7.1. 文章的评论 1.7.2. 评论的评论 1.8. 富文本编辑框和防止xss攻击 2. 设计表结构 module代码: from

基于CrossApp引擎和ghost博客系统的APP

技多不压身,即使没有用,也能装个逼. 开发这款APP,其实并不是给别人用的,更多的是给自己用.一直以来都是为APP开发数据接口,对APP开发并不了解,只知道业务需求需要什么数据,我提供什么接口来调取数据.如果止步如此,对技术的提升是没有帮助的. APP并不难,但也不简单,这款APP从学习CrossApp引擎到APP完成,总花掉了12天时间.并且还未对android适配调整,不过我也不打算适配了.android虚拟机实在太卡,还时不时的不响应(人生哲学:自身的发展,受限于当时环境影响). Cros

02-大鸭梨博客系统数据库设计及Dapper的使用

毫无疑问,数据库的设计在一个系统中起了至关重要的作用.我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计.构建一个完善的系统需要这两个阶段的充分考量.周密设计.合理联接以及密切配合.数据库设计是整个系统的根基,它关乎系统功能的实现.稳定性.扩展性等多个方面,可见数据库设计的重要性. 那么好的数据库设计应该具备什么样的基本条件呢,大致有这么几点: 1.充分体现系统的需求 不管是数据库设计还是功能设计,我们最终的目的都是要实现客户的业务需求,所以数据库设计的第一准则就是要符合业

01-大鸭梨博客系统前期准备

哈喽,大家晚上好,今天是2017年3月6日,距离VS2017正式版发布还有一天,哦不对,是两天.是在北京时间的3月8日凌晨,期待中... 革命尚未成功,学习还需继续! 做开发的人都知道,这一行真的是不断的在学习,当然行行如此吧,不能以偏概全,可是作为程序猿真的是深有体会,没办法技术更新太快,隔三差五就会有新技术产生,你不去研究,那你就比别人落下一大截,所以一定要常怀一颗学习之心,活到老,学到老.今天貌似程序猿界又出事了,滴滴的一个程序猿倒下了,四川的一家科技公司老板把员工给打了,这都是什么世道,