Django,查询问题

时间:2011-02-28 23:58:44

标签: python django django-models

我有一个充满地理数据的mysql表,如下所示:

locations
  - city
  - state
  - zipcode
  - lat
  - lon 

由于主要城镇有多个邮政编码,每个城镇都有多条记录。

示例:

"city": "BOULDER", "state": "CO", "zipcode": "80310"
"city": "BOULDER", "state": "CO", "zipcode": "80322"
"city": "BOULDER", "state": "CO", "zipcode": "80308"
...
"city": "BOULDER CITY", "state": "NV", "zipcode": "89005"
"city": "BOULDER CITY", "state": "NV", "zipcode": "89006"

我正在为我的网站创建一个自动完成插件,所以我需要查询city ='BOULDER',state ='CO'并让它只返回该城市的1个结果,而不是像它使用的那样3上面的数据。

我尝试使用.with('city')组合,然后我只回到城市名称,而不是像我所有领域的对象那样的字典(我需要)。

您是否有专家查询人员知道如何在Django 1.2中实现这一目标?

3 个答案:

答案 0 :(得分:1)

最好的解决方案是更改您的表格,但这会为您提供包含所需信息的字典:

def location_query(my_city, my_state):
    my_dict = {'city':my_city,'state':my_state}
    zips = Location.objects.filter(city = my_city, state = my_state).values_list('zip', flat = True)
    my_dict['zips'] = zips
    return my_dict

boulder_dict = location_query('Boulder', 'CO')

答案 1 :(得分:0)

您可以使用您提到的values()方法完成所需内容,但包括您需要的其他字段,并排除zipcode。我认为还有一个实际的exclude方法:查看文档。

然而,您的设计存在缺陷:它是多余的。您将获得博尔德城3个城市参赛作品的事实,因为博尔德城有3个城市参赛作品!

您应该拥有zipcodes多值字段。

答案 2 :(得分:0)

您可以创建一个邮政编码类,并使用外键连接城市。