0

私は2つのモデルを持っています

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)

すべての地域と地区に固有の行があります。両方のテーブルのすべての列を取得できるように結果を結合したい

これら 2 つのモデルは互いに関連していません。' 結合を次のようにする必要があります

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

その結果には、次のようなすべてのオブジェクトのすべての列が含まれます

obj.temp_max など

4

1 に答える 1

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.plan1 の主キーを持つ天気オブジェクトにリンクされている地域行への外部キーを持つ計画テーブル内の行です。w.district.plan同じように動作します。


また、表示する必要があるデータは計画用です。だから私は計画から天気に行きたい. 天気から計画までではありません。1つの地域に多くの行があり、地域と地区の組み合わせでフィルタリングしたいので、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()

複数の行がある場合、温度などを集計する方法はありますか。つまり、同じ地域と地区に 2 つの気象エントリがあり、平均値が必要です。

はい、集計に関するドキュメントをお読みください。

于 2012-11-01T05:02:42.653 に答える