Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django“distinct”返回多个值_Python_Django_Distinct - Fatal编程技术网

Python Django“distinct”返回多个值

Python Django“distinct”返回多个值,python,django,distinct,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)

我知道这里讨论过这个问题,但我真的无法让它发挥作用…: 我有这个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.filtertimestamp\uuu range=time\u from,time\u now。值为'device','timestamp'。按'device'排序。不同的'device'

但这仍然不起作用…: 有什么提示吗

谢谢大家!

你能试试这个吗:

DeviceLocation.objects.filter(timestamp__range=(time_from, time_now)).order_by('device', '-timestamp').distinct('device')
我不确定,但可能是.values调用正在与select distinct进行交互


此外,您还需要将“-timestamp”添加到.order_by调用中,以确保获得每个设备的最新位置。

根据将字段名传递给distinct,只有PostgreSQL才支持。你在使用PostgreSQL吗?更重要的是,它是Django 1.4的一个特性。你在运行trunk还是alpha?@isbadawi我在运行PGSQL…@Alasdair我在运行trunk。。。对不起,我错了:。不管怎么说,你们有没有任何关于我如何让它发挥作用的暗示?它不必强制使用distinct。问题是我想返回整个对象,而不仅仅是一些值。Shi Ian,谢谢,但它没有起作用:。它仍然返回多个结果。但我认为这与distinct参数有关,因为我运行的是1.3.1,我认为这只适用于1.4。我想我会尝试一种变通方法,但我希望在数据库端这样做,而不必在视图中过滤我的结果。TY,您可以发布实际执行的SQL查询吗?这是一个新特性,您可能发现了一个bug。