Djangoはモデル&フィルタを用いたマルチジョイン・クエリのために)(select_related
-
21-08-2019 - |
質問
仕事と場所:
この私は2つのモデルを持っています
class Job(models.Model):
title = models.CharField(max_length=20)
company = models.CharField(max_length=20)
location = ForeignKey('Location')
class Location(models.Model):
country = models.CharField(max_length=20)
state = models.CharField(max_length=20)
city = models.CharField(max_length=20)
latitude = models.FloatField(blank=True, default=0.0)
longitude = models.FloatField(blank=True, default=0.0)
big-city = ForeignKey('Location')
のは、言ってみましょう: 私は自分のデータベースに米国/カリフォルニア州/ San_Jose、米国/カリフォルニア州/アラメダ&アメリカ/カリフォルニア州/オークランド、アメリカ/カリフォルニア/サン・フランを持っています。私もマネージャー/イーベイ/サン・フラン、会計士/アマゾン/サン・ホセ、コープ/ IBM /オークランド&ディレクター/デル/アラメダがあります。
また:サン・ホセ、アラメダ&オークランドは彼らの大都市としてサン・フランを持っていながら、サン・フランは、big_cityとしての地位を持っている。
。 誰かがサン・フラン内のすべてのジョブを探しているとき、今、私はこのようなクエリを実行します。
Job.objects.filter(
location__country='US',
location__state='Calif',
location__city='San-Fran').selected_related('Location')
しかし、私は、ユーザーがサン・フランリージョン内のすべてのジョブを検索することができます地域別の検索を可能にしたいと思います。これは、サン・フラン内のすべてのジョブ、オークランド、アラメダ&サン・ホセのでしょうか?
のように「自分の場所を持っているすべてのジョブ見せて他の場所で基準である」。
これは二重結合と呼ばれますか?
理想的には、私はLAT-LON-半径(後の運動)を使用しているだろうが、今の私は、二重結合してそれを行う方法を知りたい。
Thxを。
Vn44ca
解決
ここであなたが望む何をすべきクエリがあります:
Job.objects.filter(location__big_city__city='San-Fran', location__big_city__state='Calif', location__big_city__country='USA')
そして実際、Djangoはこのクエリを実行するときに場所のテーブルの上に二回の参加を使用します:
SELECT "example_job"."id", "example_job"."title", "example_job"."company", "example_job"."location_id" FROM "example_job" INNER JOIN "example_location" ON ("example_job"."location_id" = "example_location"."id") INNER JOIN "example_location" T3 ON ("example_location"."big_city_id" = T3."id") WHERE (T3."country" = USA AND T3."city" = San-Fran AND T3."state" = Calif
所属していません StackOverflow