2013-02-06 76 views
0

如果你的模型結構類似這樣的聚集字段值:Django的:不同型號

class Hour(models.Model): 
    stat1 = models.FloatField() 
    stat2 = models.FloatField() 
    stat3 = models.FloatField() 

class Day(models): 
    hour = models.ForeignKey(Hour) #e.g.: Hour.id=1, Hour.id=2, ..., Hour.id=24 

class Weather(models.Model): 
    day = models.ForeignKey(Day) 

注:hours可能與某些daysstats丟失可能會從一定hours失蹤。數據收集每天都缺少所有的時間,每個小時都缺少所有的統計數據。

models這個等級的統計數據進行求和和平均的最佳方法是什麼?例如,假設我想知道某些日期沒有H5的數據時,我想stat2的總數和平均值爲H5的所有days那0123則有這個Weather有數據?

更新:我自己的解決方案,它假定Day.id等於一天的小時:例如如果Day.id == 5,那麼它的一天H5:

hours = [[hour for hour in w.day.objects.all() if hour.id==5] \ 
    for w in Weather.objects.all()] 
var2_sum = [sum(h.var2 for h in hours if hasattr(h,'var2'))] 
var2_count = [count(h.var2 for h in hours if hasattr(h,'var2'))] 
var2_avg = var2_sum/var2_count 
+1

您的Day模型的實例應該同時包含'weather_set'和'hour_set',它將爲您提供該實例的相關數據。 –

+0

天如何被指定爲H1,H2等?我在模型中沒有看到。 –

+0

@Garry ..因爲數據集中有漏洞,所以我沒有weather_set或hour_set – Cole

回答

0

UPDATE:我自己的解決方案,它假設Day.id等於一天中的小時:例如如果Day.id == 5,那麼它的一天H5:

hours = [[hour for hour in w.day.objects.all() if hour.id==5] \ 
    for w in Weather.objects.all()] 
var2_sum = [sum(h.var2 for h in hours if hasattr(h,'var2'))] 
var2_count = [count(h.var2 for h in hours if hasattr(h,'var2'))] 
var2_avg = var2_sum/var2_count 

嵌套forloops很有趣,所有的,但蠻力的方式來回答這個問題。需要使用hasattr以避免將None條目放入由列表理解所創建的列表中。