我有一个充满地理数据的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中实现这一目标?
答案 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)
您可以创建一个邮政编码类,并使用外键连接城市。