Pregunta

Tengo dos modelos: Trabajo y Ubicación:

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

Vamos a decir: Tengo EEUU / California / San-Francisco, EEUU / California / San_Jose, Estados Unidos / California / Alameda y de los EEUU / California / Oakland en mi base de datos. También tengo Gerente / Ebay / San-Fran, Contador / Amazonas / San-José, Coop / IBM / Oakland Director / Dell / Alameda.

También:.-San Fran tiene como big_city, mientras que San José-, Alameda y Oakland tienen San-Fran como su gran ciudad

Ahora hago una consulta como esta cuando alguien está buscando todos los empleos en San-Francisco.

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

Sin embargo, me gustaría para permitir la búsqueda de la región en la que el usuario puede buscar todos los empleos en San Fran-Región. Esto sería todos los empleos en San-Francisco, Oakland, Alameda y San José-?

Al igual que "Muéstrame todos los puestos de trabajo que tienen su ubicación es de referencia en otros lugares".

¿Esto se llama un doble unirse?

Lo ideal sería que iba a usar-lon-lat radio (ejercicio posterior), pero por ahora yo quiero saber cómo hacerlo con un doble unirse.

Thx.

Vn44ca

¿Fue útil?

Solución

Esta es una consulta que debe hacer lo que quiera:

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

Y, de hecho, Django usa una combinación dos veces en la ubicación de la tabla cuando se ejecuta esta consulta:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top