Question

J'ai deux modèles: Travail et Lieu:

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

Disons que: Je US / Californie / San-Fran, Etats-Unis / Californie / San_Jose, Etats-Unis / Californie / Alameda et États-Unis / Californie / Oakland dans ma base de données. J'ai aussi directeur / Ebay / San-Fran, comptable / Amazon / San-Jose, Coop / IBM / Oakland et directeur / Dell / Alameda.

Aussi:. San-Fran a lui-même comme big_city, tandis que San-Jose, Alameda et Oakland ont San-Fran comme une grande ville

Maintenant, je fais une requête comme quand quelqu'un est à la recherche de tous les emplois à San-Fran.

Job.objects.filter(
location__country='US', 
location__state='Calif', 
location__city='San-Fran').selected_related('Location')

Cependant, je voudrais permettre la recherche par région où l'utilisateur peut rechercher tous les emplois à San-Fran Région. Ce serait tous les emplois à San-Fran, Oakland, Alameda et San-Jose?

Comme « Montrez-moi tous les emplois qui ont leur emplacement est référence par d'autres endroits ».

Serait-ce appelé un double rejoindre?

Idéalement, je serais en utilisant latitude-longitude-rayon (exercice ultérieur), mais pour l'instant je veux savoir comment le faire avec une double jointure.

Thx.

Vn44ca

Était-ce utile?

La solution

Voici une requête qui devrait faire ce que vous voulez:

Job.objects.filter(location__big_city__city='San-Fran', location__big_city__state='Calif', location__big_city__country='USA')

Et en effet, Django utilise une jointure deux fois sur la table de localisation lors de l'exécution de cette requête:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top