Как получить список наборов запросов и сделать пользовательский фильтр в Django - PullRequest
0 голосов
/ 03 марта 2010

У меня есть несколько таких кодов:

cats = Category.objects.filter(is_featured=True)
for cat in cats:
    entries = Entry.objects.filter(score>=10, category=cat).order_by("-pub_date")[:10]

Но, результаты показывают только последний элемент cat, а также проблемы с фильтром "> =". Помогите мне решить эти проблемы. Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 03 марта 2010

Вы можете начать с чтения django docs на эту тему. Однако, просто для начала, метод filter() похож на любой другой метод, в котором он принимает только аргументы и аргументы ключевых слов, а не выражения. Итак, вы не можете сказать foo <= bar, просто foo=bar. Django обходит это ограничение, позволяя в именах ключевых слов указывать отношение к значению, которое вы передаете. В вашем случае вы можете использовать:

Entry.objects.filter(score__gte=10)

__gte, добавленное к имени поля, указывает на сравнение, которое должно быть выполнено (score >= 10).

1 голос
/ 03 марта 2010

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

entries = Entry.objects.filter(score__gte=10, category__is_featured=True).order_by("-pub_date")[:10]
...