В Django, используя fiter (), затем получить () на набор запросов? - PullRequest
1 голос
/ 28 февраля 2011

Могу ли я объединить использование filter () и get () в наборах запросов для возврата объекта в представлении django? У меня есть следующий вид;

def my_view(request, city, store, item):
item = Item.objects.filter(store__city=city, city=city).get(item=item)

Все предметы уникальны для города и магазина. В настоящее время я пытаюсь отфильтровать набор запросов на основе двух полей ForeignKey, а затем использовать метод get для CharField, но получаю сообщение об ошибке, что объект не существует. Я неправильно подхожу к этому или мой синтаксис где-то выключен? Спасибо

1 Ответ

1 голос
/ 28 февраля 2011

Если связанный фильтр возвращает только 1 результат, то вы можете использовать:

def my_view(request, city, store, item):
    item = Item.objects.filter(store__city=city, city=city)[0]

, который фильтрует записи Элемента и сохраняет их в QuerySet, который имеет структуру list-lilke, затем возьмите первыйelement ...

Если вы уверены, что получите результат, тогда вы можете использовать get вместо filter:

item = Item.objects.get(store__city=city, city=city)

Но если не существует записи, которая соответствует вашим критериям фильтра, тогдаВы получаете ошибку.Поэтому, если вы не уверены, будет ли фильтрация возвращать результат или нет, используйте:

item = Item.objects.filter(store__city=city, city=city)
if item:
    item = item[0]

, который проверяет результирующий набор запросов и получает первый результат, если таковой существует.

...