Frage

Ich habe eine Anwendung namens Location. Ort hat Land, Region, Stadt, Big_City_Nearby, Länge, Breite.

Ich habe eine Anwendung für einen Artikel zu verkaufen. Artikel hat Titel, Link, Beschreibung, Preis und Lage, die eine ForeignKey ().

Nun, wenn jemand alle Einzelteile zu verkaufen in den USA sehen will, sie auf einen Link klicken (sagen wir http://example.com/United-States/ ) und die URL in den „Vereinigten Staaten“ als Land mit Staat, Stadt und big_city_nearby leer passieren wird.

#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})

Es gibt kein Problem, wenn sie passieren in ( http://example.com/United_State/California/ Oakland ), wie ich weitermachen kann und alle Elemente in Oakland Liste ohne Notwendigkeit fanden die Lage anzuzeigen pro Artikel.

Das Problem ist, wenn die Auswahl http://example.com/United_States/ oder http://example.com/United_States/California/ . Als ich jetzt die Lage der einzelnen Elemente wie die Elemente angezeigt werden aus verschiedenen Städten sein kann.

So

, wenn die Vorlage die Liste der Elemente wird, es wird nur die ForeignKey (Ort) in jedem Element. Ich kann eine weitere Schleife in Kraft gesetzt, wobei jedes Element untersucht wird und das Lage-Objekt abgerufen und in einem Tupel mit dem Element-Objekt gesetzt. Aber das wäre sehr SQL ineffizient sein. Wie habe ich die Datenbank treffen für jedes Element das aktuelle Standort-Objekt erhalten gefunden.

Gibt es eine Möglichkeit, wo ich die ForeignKey die Stadt hält statt der Id an die Stelle Zeile in der Datenbank sagen kann.

Um die Frage einfach zu machen: Gibt es einen besseren Weg, um die Lage aus als Anwendung zu verlassen, ohne eine Notwendigkeit Land zu schaffen, Staat, Stadt ... etc. in jeder Artikelzeile.

Thx,

VN44CA

War es hilfreich?

Lösung

Item.objects.filter(...).select_related("location"). Dies wird JOIN gegen die Standorte Tisch, so dass es dann nur eine Abfrage sein.

Noch besser ist, Item.objects.filter(location__country=country, location__state=state).select_related("location") und Sie können die Location Abfrage ganz weglassen.

Ehrlich gesagt, ich habe Probleme, herauszufinden, ob das alles, was Sie brauchen, aber das übernimmt die O (N) abfragt Ausgabe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top