Django'独特'返回多个值

时间:2012-01-13 16:45:10

标签: python 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不起作用...返回同一设备的多个结果。 我搜索了网站并找到了使用值的解决方法,即便如此我也做不到:

  
    
      

DeviceLocation.objects.filter(timestamp__range =(time_from,time_now))。values('device','timestamp')。order_by('device')。distinct('device')

    
  

但这仍然不起作用...... :( 任何提示?

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

DeviceLocation.objects.filter(timestamp__range=(time_from, time_now)).order_by('device', '-timestamp').distinct('device')

我不确定,但可能是.values()调用与select distinct进行交互。

此外,您要将'-timestamp'添加到.order_by()调用,以确保您获取每个设备的最新位置。