2012-01-13 64 views
0

我知道这个问题在这里讨论,但我真的不能得到这个工作... :( 我有这个DeviceLocation型号:Django的“独特”返回多个值

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))值( '装置', '时间戳')ORDER_BY( '设备')不同的( '设备')。

但是这仍然无法正常工作... :( 任何提示?

谢谢!

+0

根据[文档](https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.distinct)将字段名称传递给'distinct( )'仅在PostgreSQL中受支持。你在使用PostgreSQL吗? – 2012-01-13 16:51:42

+0

更重要的是,它是一个Django 1.4功能。你正在运行树干还是阿尔法? – Alasdair 2012-01-13 16:56:05

+0

@isbadawi我正在运行PGSQL ... – 2012-01-13 17:01:55

回答

0

你可以试试这个:

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

我不知道,但它可能是.values()调用与选择不同的交互。

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

+0

嗨伊恩,谢谢,但它没有工作:(。 它仍然返回多个结果。但我认为它必须做与distinct()参数,因为我运行宁1.3.1,它只能在1.4,我认为。 我想我会尝试一种解决方法,但我想做到数据库端,而不必在我的视图中筛选我的结果。 TY, – 2012-01-16 15:42:37

+0

您可以发布实际正在执行的SQL查询吗?这是一项新功能,您可能发现了一个错误。 – 2012-01-16 16:17:03