Django: получить список записей по штатам, используя почтовый индекс - PullRequest
0 голосов
/ 11 января 2011

У меня есть приложение Django, в котором есть серия сообщений, помеченных почтовым индексом.Я хотел бы создать страницу, которая показывает все сообщения по штатам, но я не уверен, как это сделать.У меня есть таблица ZipCode, но мое поле Post.zipcode не связано с ней (в основном потому, что оно введено пользователем и позволяет использовать почтовые индексы, которые не находятся в БД или за пределами США).

Мое отношениемодели:

class Post(models.Model):
    body = models.TextField()
    zipcode = models.CharField(max_length=5)

class ZipCode(models.Model):
    zipcode = models.CharField(max_length=5)
    city = models.CharField(max_length=64)
    statecode = models.CharField(max_length=2)
    statename = models.CharField(max_length=32)
    latitude = models.FloatField()
    longitude = models.FloatField()

В моем представлении Django я бы хотел взять параметр "state", передаваемый из моего шаблона url, и сделать что-то вроде этого:

def posts_by_state(request, state):
    posts = Post.objects.filter(zipcode__statecode=state)
    ...

К сожалению, мое поле Post.zipcode не является внешним ключом для ZipCode, поэтому я получаю эту ошибку, если пытаюсь:

FieldError at /post/state/VT/
Join on field 'zipcode' not permitted.

У кого-нибудь есть подсказка о том, как мне создать набор запросов, который собирает все сообщения вместезапрашиваемое состояние?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 января 2011

Я бы предложил обновить Post.zipcode до ForeignKey до ZipCode.Если вы не можете, вы можете сделать поиск следующим образом:

zipcodes = [zip_code.zipcode for zip_code in ZipCode.objects.filter(statecode=state)]
posts = Post.objects.filter(zipcode__in=zipcodes)

На заметке, ZipCode не похоже на правильное название для этой модели.Возможно, Location будет лучше.

0 голосов
/ 13 января 2011

Довольно простое решение в конце концов.Я добавил новое поле внешнего ключа в Post с именем location, чтобы Post теперь выглядел следующим образом:

class Post(models.Model):
   body = models.TextField()
   zipcode = models.CharField(max_length=5)
   location = models.ForeignKey(ZipCode, null=True, blank=True, default=None)

Когда я создаю новые сообщения, я проверяю, соответствует ли введенная строка почтового индекса записи вБаза данных ZipCode, и если это так, я создаю расположение FK.Это позволяет мне сделать это, на мой взгляд:

def posts_by_state(request, state):
   posts = Post.objects.filter(location__statecode=state)
   ...

Спасибо Сету и Сдолану за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...