Pregunta

Tengo una aplicación llamada Ubicación. La ubicación tiene País, Estado, Ciudad, Big_City_Nearby, Longitud, latitud.

Tengo una solicitud de un artículo para vender. El artículo tiene Título, Enlace, Descripción, Precio y amperios; Ubicación que es una ForeignKey ().

Ahora, si alguien quiere ver todos los artículos para vender en los EE. UU., hace clic en un enlace (digamos http://example.com/United-States/ ) y la URL pasará en los Estados Unidos " como país con estado, ciudad y big_city_nearby vacíos.

#in view.py
class by_location(request, country, state, city, big_city_nearby)
   location = Location.objects.filter(country=country, state=state, city=city, big_city_nearby=big_city_nearby)
   items = Items.objects.filter(location__in=[location.id for loc in location])
   return render_to_response('item/by_location.html', {"items":itmes, "country":countyr, "cit":city, "nearby":big_city_nearby})

No hay ningún problema si pasan ( http://example.com/United_State/California/ Oakland ) ya que puedo seguir adelante y enumerar todos los elementos en Oakland sin necesidad de mostrar la ubicación por elementos encontrados.

El problema es cuando se selecciona http://example.com/United_States/ o http://example.com/United_States/California/ . Como ahora tengo que mostrar la ubicación de cada elemento, ya que los elementos pueden ser de diferentes ciudades.

Entonces, cuando la plantilla obtiene la lista de elementos, solo obtiene ForeignKey (Ubicación) en cada elemento. Puedo colocar otro bucle, donde se examina cada elemento y se busca el objeto Ubicación y se coloca una tupla con el objeto elemento. Pero eso sería muy ineficiente en SQL. Como tendría que presionar la base de datos para cada elemento encontrado para obtener el objeto de ubicación real.

¿Hay alguna manera en que pueda decir que ForeignKey mantiene la ciudad en lugar del Id en la fila de ubicación en la base de datos?

Para simplificar la pregunta: ¿hay una mejor manera de dejar la ubicación como una aplicación, sin necesidad de proporcionar país, estado, ciudad ... etc. en cada fila de elementos.

Thx,

VN44CA

¿Fue útil?

Solución

Item.objects.filter (...). select_related (" location ") . Esto se unirá a la tabla de ubicaciones, por lo que solo será una consulta.

Aún mejor, Item.objects.filter (location__country = country, location__state = state) .select_related (" location ") y puede omitir la consulta Location por completo .

Honestamente, tengo problemas para determinar si eso es todo lo que necesita, pero eso soluciona el problema de las consultas O (N).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top