如何在django python中加入两个表的结果

时间:2012-11-01 04:57:31

标签: python django

我有两个型号

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)')

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

为每个地区和地区提供独特的排。 我想结合结果,以便我可以得到两个表的所有列

这两个模型彼此无关。 “ 我需要像

那样进行连接

join weather w on w.region = A.region and w.distric = A.district

以便结果包含每个对象中的所有列,如

obj.temp_max等

1 个答案:

答案 0 :(得分:2)

w = Weather.objects.get(pk=1)
w.region.plan.name
w.district.plan.name
w.temp_max
w.temp_min

w.region是链接区域行,因此可以通过它访问区域模型中的任何属性。因此,如果您的区域模型有name,则会w.region.name,而w.district则相同。

w.region.plan是计划表中的一行,该行具有链接到主要键为1的天气对象的区域行的外键; w.district.plan的工作方式相同。


  

此外,我必须显示的数据是计划。所以我想去   从计划到天气。不是从天气到计划。我认为我不能   go plan.region.weather.temp_max因为会有很多行   一个地区,我想过滤区域和地区的分类

p = Plan.objects.get(pk=1) # get a Plan
p.region.weather_set.all() # all "weathers" for the region for this plan
p.district.weather_set.all() # all "weathers" for the district for this plan

过滤:

plans = Plan.objects.filter(region__name='Region 1') # all plans for that region
for plan in plans:
   region_weather = plan.region.weather_set.all()
   district_weather = plan.district.weather_set.all()

  

如果我有多行,有没有办法聚合它   e,g温度。即我有两个相同地区的天气和   区和我想要平均

是的,请阅读aggregation上的文档。