2010-08-03 1 views
0

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

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

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

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

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

ответ

1

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

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

+0

После прочтения этого, а затем делать дополнительные исследования основаны от этого, это действительно помогло мне. Спасибо. Мне просто нужно было увидеть рабочий пример, похожий на это, чтобы обойти его. Благодаря! – littlejim84

 Смежные вопросы

  • Нет связанных вопросов^_^