Python Django“distinct”返回多个值
我知道这里讨论过这个问题,但我真的无法让它发挥作用…: 我有这个DeviceLocation模型: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)
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。