1

我有一个名为 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。因为我必须为找到的每个项目访问数据库才能获取实际的位置对象。

有没有一种方法可以让我说 ForeignKey 将城市而不是 Id 保存到数据库中的位置行。

让问题简单化:有没有更好的方法将位置作为应用程序保留,而无需提供国家、州、城市等。在每个项目行中。

谢谢,

VN44CA

4

1 回答 1

2

Item.objects.filter(...).select_related("location"). 这将针对位置表加入,因此它只是一个查询。

更好的是,Item.objects.filter(location__country=country, location__state=state).select_related("location")您可以完全省略Location查询。

老实说,我很难确定这是否就是您所需要的,但这可以处理 O(N) 查询问题。

于 2009-05-08T19:04:49.967 回答