1. Python

Django-日期时间坑

一.问题重现

首先在models.py中创建一个记录来访者的模型

class AccessLog(models.Model):
    a_ip = models.CharField(max_length=16)
    a_time = models.DateTimeField(auto_now=True)

有来访者IP和访问时间

然后在views.py中写两个视图函数

def add_log(request):
    log = AccessLog()
    log.a_ip = "192.168.1.%d" % random.randint(1, 100)
    log.save()
    return HttpResponse("%s 添加成功" % log.a_ip)


def select_log(request):
    # users = AccessLog.objects.all()
    context = {
        "users": users,
    }
    return render(request, "logselect.html", context)

一个用来产生访问日志,一个用来查看访问日志。

模板logselect.html如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Select Result</title>
</head>
<body>
<table>
    <tr>
        <th>a_ip</th>
        <th>a_time</th>
    </tr>

    {% for user in users %}
    <tr>
        <td>{{user.a_ip}}</td>
        <td>{{user.a_time}}</td>
    </tr>
    {% endfor %}

</table>
</body>
</html>

然后启动服务器。。。

看起来没有什么问题,接下来做一些修改

def select_log(request):
    # users = AccessLog.objects.all()
    users = AccessLog.objects.filter(a_time__month=1)
    context = {
        "users": users,
    }
    return render(request, "logselect.html", context)

增加删选条件为月份为1月的;那么应该只有一条记录被筛出来才对。

结果是一条记录都没有!!!

二.原因 && 解决方法

由于Django自带一套时区与数据库时区不一致所致。

两种解决方法:

1.修改数据库时区设置

2.修改Django时区设置

这里我选择第二种方法;比较好改

只要打开项目配置文件setting.py

将USE_TZ修改为False即可!


USE_TZ = False

等服务器自动重启后刷新网页。。。

OK!