0

我有模型称为 Plan

计划具有statecity与之相关联

我有另一个模型Weather,它在每天的不同时间都有city数据state

现在我想用称为天气的额外字典获取所有计划对象。

步骤是

  1. 获取所有计划对象
  2. 现在根据州和城市,每个计划将在天气表中有很多行
  3. 我想聚合所有列。例如,如果我对该城市和州有五行,并且温度值是 20 , 21 , 22 , 23 , 24。然后我想取所有温度的平均值,即 22 并存储在计划模型中的新字典中

这样我就可以访问Plan.weather.temperature它了22

我可以使用 for 循环,但这将是很多数据库查询。可以在一个查询或任何可能的选项上做到这一点

编辑:

class Plan(model.model):
    name = tinymce_models.HTMLField(blank=True, null=True)
    region = models.ForeignKey(Region)
    district = models.ForeignKey(District)

 class Weather(model.model):

        region = models.ForeignKey(Region)
        district = models.ForeignKey(District)
        temp_max = models.IntegerField(blank=True, null=True, verbose_name='Max temperature (C)')
        temp_min = models.IntegerField(blank=True, null=True, verbose_name='Min temperature (C)')
4

1 回答 1

2

取决于您的型号,但类似这样:

Plan.objects.filter(region__name="CA").annotate(avg_temperature=Avg("region__weather__temp_max"))

avg_temperature字段现在可用于查询返回的对象。此名称可根据提供给注释的关键字参数进行自定义。

或者看看这里:https ://docs.djangoproject.com/en/dev/topics/db/aggregation/

Django 内置了这些类型的查询。如果聚合和注释 api 不能促进这一点(似乎是开箱即用的有力候选者),那么您可以选择编写原始查询:

https://docs.djangoproject.com/en/dev/topics/db/sql/

于 2012-11-01T04:25:00.000 回答