Джанго, вопрос вопрос - PullRequest
       5

Джанго, вопрос вопрос

2 голосов
/ 01 марта 2011

У меня есть таблица 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, как это было бы с использованием данных выше.

Я пытался использовать group by с .values ​​('city'), но потом я получаю только название города, а не словарь, как объект всех моих полей(как мне нужно).

Кто-нибудь из вас знает, как я могу выполнить это в Django 1.2?

Ответы [ 3 ]

1 голос
/ 08 июля 2011

Лучшее решение - изменить таблицу, но это даст вам словарь со всей необходимой информацией:

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')
0 голосов
/ 01 марта 2011

Вы можете создать класс Zipcode и связать город с ForeignKey.

0 голосов
/ 01 марта 2011

Вы можете выполнить то, что вы хотите, используя values() метод, как вы упомянули, но включая другие необходимые вам поля и исключая zipcode. Я думаю, что есть и настоящий exclude метод: проверьте документацию.

Тем не менее, ваш дизайн имеет недостатки: он избыточен. Тот факт, что вы получаете 3 записи для города Боулдер-Сити, это потому что есть 3 записи для города Боулдер-Сити!

У вас должно быть zipcodes многозначное поле.

...