В Django поиск и фильтрация по окнам поиска и категориям за один раз? - PullRequest
1 голос
/ 03 августа 2010

Интересно, не могли бы вы мне помочь?

У меня есть список данных, которые будут отображаться на одной странице.Здесь есть простое окно поиска, список категорий и список тегов, которые можно использовать для фильтрации списка данных.Я пытаюсь построить его с нуля (поэтому он не требует JavaScript), но в итоге он отправит критерии поиска и вернет новый список, используя Ajax.

Итак, у меня есть список категорийв моей базе данных («большой», «маленький» и т. д.), и у меня есть список тегов в моей базе данных («деревянный», «медный»).Теги используются, чтобы отфильтровать больше того, что в категориях.У меня тогда есть окно поиска.В идеале я хочу, чтобы пользователь эффективно отмечал, какие категории он хочет, помечает, какие теги он хочет, и, возможно, помещал поиск по ключевым словам, а затем отправлял все эти данные, чтобы их можно было запрашивать и возвращать новый список фильтрованных данных.

Я не эксперт по Django, и я застрял на том, как и где это сделать ... Как Django выделяет категории в виде списка флажков, а теги - как флажкисписок и поле поиска с кнопкой отправки ... Что при отправке я могу взять все эти данные и выполнить необходимые запросы в базе данных?Я не совсем понимаю, как бы я это сделал ... Я смотрел на Django Docs и Django Book несколько дней, и то, как я делаю вещи, похоже, не указано в списке.

Пожалуйста, любая помощь будет просто фантастической.

1 Ответ

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

выплевывая категории в виде списка флажков,

теги в виде списка флажков и поле поиска

с кнопкой отправки ...

Это <form> на вашей HTML-странице.Это, вероятно, не очень хорошо соответствует модели Django.Это уникальная форма, построенная более или менее вручную.

Я могу взять все эти данные и выполнить необходимые запросы в базе данных?

Это функция просмотра.

У вас, вероятно, будет что-то подобное.

objects= SomeModel.objects
if request.GET ... has categories ...
    objects = objects.filter( ... categories ... )
if request.GET ... has tags ...
    objects = objects.filter( ... tags ... )
if request.GET ... has search ...
    objects = objects.filter( something__contains( search ) )
return render_to_response( ... etc. ... )

то, как я делаю вещи, не 'Кажется, вы не в списке.

Вы выходите за рамки этого урока.

Что делать?

  1. Пройдите ПОЛНОСТЬЮ.На протяжении всего пути.Каждый шаг.Похоже, это не решит вашу проблему, но вы ДОЛЖНЫ выполнить ВСЕ учебное пособие.

  2. Создайте свою модель.Вы не упомянули модель в вопросе.Это абсолютно самая важная и фундаментальная вещь.

  3. Создайте интерфейс администратора по умолчанию для этой модели.Получите интерфейс администратора по умолчанию для работы и делайте то, что вы хотели бы сделать.У него отличный поиск, фильтрация по категориям и тегам.

    Чтобы заставить администратора по умолчанию работать, вам необходимо разработать довольно сложные модели и функции форм.Вам, вероятно, придется добавить функции методов в вашу модель, а также элементы выбора и другие полезные свойства.

  4. ПОСЛЕ того, как у вас есть страница администратора, достаточно близкая к тому, что вы хотите, вы можете написать вамсобственный настраиваемый вид.


каждый отдельный флажок имеет свое имя ('category_option_1', 'category_option_2' и т. д.) ... Как мне их прочитать?Я не могу просто поместить запрос. POST ['category_option_n']?

Правда?Почему ваш вопрос не сказал это?

Вы спрашиваете об этом?

for k in range(1024):
    name = 'category_option_{0}'.format(k)
    # Use request.POST.get(name,None) to build a `Q` object
...