首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django时间函数错误

Django时间函数错误
EN

Stack Overflow用户
提问于 2020-08-31 11:09:22
回答 1查看 209关注 0票数 2

我想要创建一个函数,返回每辆车在过去48小时内发送导航数据的最后点的列表。我创建了一个视图,它工作,它正确地显示名称,但是我想要显示数据发送已经有多长时间了。我用的是时间,但它显示错了。它为所有数据增加13个小时并打印相同的小时。我认为这与我的模特有关,因为我不能做任何关于小时,分钟的事情。像这样

我怎么才能修好它?

navigation.html

代码语言:javascript
运行
复制
          <td>{{ result.datetime|timesince }}</td>

models.py

代码语言:javascript
运行
复制
class Vehicle(models.Model):

    id = models.IntegerField(primary_key=True)
    plate = models.CharField(max_length=30)

    def __str__(self):
        return str(self.plate)


class NavigationRecord(models.Model):
    id = models.IntegerField(primary_key=True)
    vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
    datetime = models.DateField(default=timezone.now)
    latitude = models.FloatField()
    longitude = models.FloatField()

    def __str__(self):
        return str(self.vehicle)

views.py

代码语言:javascript
运行
复制
def get_48_hours(request):

    time_48 = datetime.now() - timedelta(hours=48)
    results = NavigationRecord.objects.filter(datetime__gte=time_48).order_by('-datetime')
    context = {

            'results': results,
    }
    return render(request, 'navigation.html', context)

注意:为了改进我的代码,可以接受任何建议。

EN

Stack Overflow用户

回答已采纳

发布于 2020-08-31 11:54:04

此错误很可能是由于您将朴素日期时间对象与具有数据库中关联时区信息的对象进行比较造成的。

这是一个常见的bug来源。为了防止这种情况,不要在Django代码中使用datetime.now(),而是使用Django实用程序函数timezone.now()。下面是使用timezone.now()重写的代码

代码语言:javascript
运行
复制
from django.utils import timezone

def get_48_hours(request):

    time_48 = timezone.now() - timedelta(hours=48)
    results = NavigationRecord.objects.filter(datetime__gte=time_48).order_by('-datetime')
    context = {

            'results': results,
    }
    return render(request, 'navigation.html', context)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63669684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档