В Django правильно составлять набор запросов с несколькими категориями, несколькими тегами и поиском? - PullRequest
0 голосов
/ 03 августа 2010

У меня есть список данных. Эта модель данных имеет много-много-много полей как для модели категорий, так и для модели ключевых слов. Сама модель данных имеет имя и описание. Данные могут иметь несколько категорий и ключевых слов.

На внешнем интерфейсе пользователь может выбрать несколько категорий, чтобы отфильтровать данные или выполнить поиск ... Таким образом, показанные данные должны быть любыми данными с любой из выбранных категорий. Если «Тестовые данные 1» имеют категорию «А», а «Тестовые данные 2» имеют категорию «В», то если пользователь выбирает, чтобы увидеть категории «А» и «В», то будут показаны обе части данных. Поиск предназначен для поиска данных в заголовке, описании и ключевых словах, связанных с данными, если выбраны какие-либо категории, он будет искать, в каких данных остались после запроса категорий.

Я не эксперт в Django здесь ... Я пытаюсь найти лучший способ сделать это. Я не хочу прибегать к использованию чего-то вроде стога сена и т. Д., Поскольку мои данные довольно просты. Я обнаружил, что выполнение .filter () для объектов в основном дает мне AND в базовом SQL, что не идеально для работы категорий. Кажется, мне нужно какое-то ИЛИ ... может быть?

Выбор категории во внешнем интерфейсе выполняется с помощью формы, поэтому возвращаемые данные в основном представляют собой список выбранных категорий ['A', 'B', 'C'] ... нет никакого способа Я могу поместить это в набор запросов в Django и вернуть все данные, которые имеют одну или любую из этих категорий?

Большое спасибо!

1 Ответ

1 голос
/ 04 августа 2010

Не уверен, что вы имеете в виду здесь. Вы можете попробовать что-то вроде этого:

from django.db.models import Q

query = 'fun'
books = Fun.objects.filter(Q(categories__id__in=[1,2,3]),
                     Q(name__icontains=query) | \
                     Q(description__icontains=query) | \
                     Q(keywords__title__icontains=query))

http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

...