我想要创建一个函数,返回每辆车在过去48小时内发送导航数据的最后点的列表。我创建了一个视图,它工作,它正确地显示名称,但是我想要显示数据发送已经有多长时间了。我用的是时间,但它显示错了。它为所有数据增加13个小时并打印相同的小时。我认为这与我的模特有关,因为我不能做任何关于小时,分钟的事情。像这样
我怎么才能修好它?
navigation.html
<td>{{ result.datetime|timesince }}</td>models.py
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
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)注意:为了改进我的代码,可以接受任何建议。
发布于 2020-08-31 11:54:04
此错误很可能是由于您将朴素日期时间对象与具有数据库中关联时区信息的对象进行比较造成的。
这是一个常见的bug来源。为了防止这种情况,不要在Django代码中使用datetime.now(),而是使用Django实用程序函数timezone.now()。下面是使用timezone.now()重写的代码
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)https://stackoverflow.com/questions/63669684
复制相似问题