Django 'distinct' 返回多个值
我知道这个话题之前讨论过,但我真的搞不定这个问题... :(
我有一个叫做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')
问题是,distinct这个功能没有正常工作... 它给我返回了同一个设备的多个结果。
我在网站上查找了一下,发现可以用values来解决这个问题,不过我还是搞不定:
DeviceLocation.objects.filter(timestamp__range=(time_from, time_now)).values('device', 'timestamp').order_by('device').distinct('device')
但这还是不行... :( 有什么提示吗?
谢谢!
1 个回答
0
你可以试试这个:
DeviceLocation.objects.filter(timestamp__range=(time_from, time_now)).order_by('device', '-timestamp').distinct('device')
我不太确定,但可能是因为 .values() 这个调用和 select distinct 有关系。
另外,你还需要在 .order_by() 里加上 '-timestamp'
,这样才能确保你得到每个设备最新的位置。