Locationというアプリケーションがあります。場所には、国、州、都市、Big_City_Nearby、経度、緯度があります。
販売アイテムの申し込みがあります。アイテムには、ForeignKey()であるタイトル、リンク、説明、価格、および場所があります。
これで、米国で販売されているすべての商品を表示したい場合は、リンク(http://example.com/United-States/など)をクリックすると、URLが「米国」で国として渡されます。 state、city、big_city_nearbyは空です。
#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})
見つかったアイテムごとの場所を表示しなくても、先に進んでオークランドのすべてのアイテムを一覧表示できるので、パス( http://example.com/United_State/California/Oakland )しても問題ありません。
問題は、http ://example.com/United_States/またはhttp://example.com/United_States/California/を選択した場合です。アイテムはさまざまな都市からのものである可能性があるため、各アイテムの場所を表示する必要があります。
したがって、テンプレートがアイテムのリストを取得するとき、各アイテムのForeignKey(Location)のみを取得します。別のループを配置できます。このループでは、各アイテムが調べられ、Locationオブジェクトがフェッチされ、アイテムオブジェクトとタプルに入れられます。しかし、それは非常に非効率的なSQLになります。実際のロケーションオブジェクトを取得するには、見つかった各アイテムのデータベースにアクセスする必要があるためです。
データベースのロケーション行のIDではなく、ForeignKeyが都市を保持していると言える方法はありますか?
質問を簡単にするために:国、州、都市などを提供する必要なしに、アプリケーションとして場所を除外するより良い方法はありますか?各アイテムの行に。
どうも、
VN44CA