Domanda

Ho due modelli: Lavoro & Location:

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

Diciamo: Ho US / California / San-Fran, US / California / San_Jose, US / California / Alameda & USA / California / Oakland nel mio database. Ho anche Gestore / Ebay / San-Fran, ragioniere / Amazon / San Jose-, Coop / IBM / Oakland e Direttore / Dell / Alameda.

Inoltre:. San-Fran stessa ha come big_city, mentre San Jose-, Alameda e Oakland hanno San-Fran come la loro grande città

Ora mi faccio una domanda come questo, quando qualcuno è alla ricerca di tutti i lavori in San-Fran.

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

Tuttavia, mi piacerebbe per consentire la ricerca per regione dove l'utente può cercare per tutti i lavori a San-Fran Regione. Questo sarebbe tutti i posti di lavoro in San-Francisco, Oakland, Alameda e San Jose-?

Come "Mostrami tutti i posti di lavoro che hanno la loro posizione è di riferimento per altre posizioni".

Sarebbe questo essere chiamato un doppio partecipare?

Idealmente, mi sarebbe utilizzando lat-lon-raggio (esercizio successivo), ma per ora voglio sapere come si fa con un doppio join.

Thx.

Vn44ca

È stato utile?

Soluzione

Ecco una domanda che dovrebbe fare quello che vuoi:

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

E in effetti, Django utilizza un join due volte sul tavolo posizione durante l'esecuzione di questa query:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top