我知道这里讨论过这个主题,但我真的无法让它发挥作用…:(我有这个DeviceLocation型号:
class DeviceLocation(models.Model):
device = models.ForeignKey(Device, related_name='locations', null=True, on_delete=models.SET_NULL)
device_imei = models.CharField(max_length=20)
user = models.ForeignKey(User, related_name='device_locations', null=True, on_delete=models.SET_NULL)
user_username = models.CharField(max_length=30, null=True)
timestamp = models.DateTimeField()
latitude = models.FloatField()
longitude = models.FloatField()
accuracy = models.FloatField()
speed = models.FloatField()
我想在最后5分钟内获得每个不同设备的最后位置。所以我尝试了这个:
time_now = datetime.now()
time_from = time_now.replace(minute=time_now.minute - 5)
last_device_locations = DeviceLocation.objects.filter(timestamp__range=(time_from, time_now)).distinct('device')
问题是,明显不起作用。。。返回同一设备的多个结果。我搜索了这个网站,发现了一个使用价值观的方法,即使我做不到:
DeviceLocation.objects.filter(timestamp_range=(time_from,time_now)).values('device','timestamp').order_by('device').different('deviice')
但这仍然不起作用…:(有什么提示吗?
谢谢!
你能试试这个吗:
DeviceLocation.objects.filter(timestamp__range=(time_from, time_now)).order_by('device', '-timestamp').distinct('device')
我不确定,但可能是.values()调用与select distinct交互。
此外,您还想将'-timestamp'
添加到.order_by()调用中,以确保获得每个设备的最新位置。