0

モデルが次のように構成されている場合:

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特定の から欠落している可能性があり、特定の からdays欠落しstatsている可能性がありますhours。データの収集には、毎日のすべての時間と、1 時間ごとのすべての統計が欠けています。

のこの階層の統計を合計して平均化するための最良の方法は何modelsですか? たとえば、ある日のデータがないことがわかっているときに、データのあるすべてのstat2の合計と平均が必要だとしましょう。H5daysWeatherH5

更新: 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
4

1 に答える 1

0

更新: 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

于 2013-02-07T14:01:58.443 に答える