2012-01-13 40 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