Использование виджета select в Django для получения данных из базы данных Postgres

Я очень новичок в Django, Stackoverflow и кодировании в целом, поэтому буду признателен за любую помощь.

Я пытаюсь добавить на свой веб-сайт форму, в которой будут только поля выбора. После того, как пользователь выберет все параметры, я хочу перенаправить их на другую страницу, где я возвращаю различную информацию в нескольких таблицах из моей базы данных на основе всех выбранных параметров (все выбранные параметры вместе влияют на информацию, отображаемую в таблицах).

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

Пример: На первой странице есть 3 варианта:

  1. книжный жанр
  2. город
  3. возраст

На перенаправленной странице есть три таблицы:

  1. Самые читаемые книги этого жанра в этом городе люди примерно этого возраста
  2. Список библиотек в этом городе, отсортированный по количеству книг этого жанра
  3. Как зарегистрироваться в топ-3 библиотеках

Пользователь никоим образом не изменяет базу данных, поэтому я полагаю, что форма может иметь метод GET.

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

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

forms.py:

class MyForm(forms.Form):

    select1 = forms.ChoiceField(widget=forms.Select,
              choices=Select1.objects.all().values_list('id', 'name'))
    select2 = forms.ChoiceField(widget=forms.Select, 
              choices=select2.objects.all().values_list('id', 'name'))
    select3 = forms.ChoiceField(widget=forms.Select, 
              choices=select3.objects.all().values_list('id', 'name'))

views.py

class Page(TemplateView):
    template_name = 'project/index.html'

    def get(self, request):
      form = MyForm()
      return render(request, self.template_name, {'form': form})

html:

<select name = "{{ form.select1.name }}">
    <option class = "dropdown-menu" value = "" disabled selected>Please 
    select</option>
    {% for choice in form.select1.field.choices %}
        <option value = "{{ select1.0 }}">{{ select1.1 }}</option>
    {% endfor %}
</select>

и тот же код для двух других выбирает. Я визуализировал их отдельно из-за того, как я спроектировал сайт.

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

jastr 06.01.2019 20:43

Вам нужно будет создать представление / метод, на который будет отправляться форма. В этом представлении вы можете получить доступ к форме stackoverflow.com/questions/4706255/…

jastr 06.01.2019 20:44

@jastr спасибо за ответ! Я прочитал официальную документацию по виджету выбора, и я просмотрел несколько сообщений о добавлении метода публикации в представления, но не смог найти, как перенаправить на другой шаблон и сохранить выбранные варианты. Меня также смутило, как это должно выглядеть на стороне базы данных, так как я никогда раньше не работал с базами данных, но, думаю, я просто продолжу поиск. "if form.is_valid ()" по какой-то причине никогда не является истинным с этим кодом.

tardis314 06.01.2019 21:47

Учебник по django (а не только документация) покажет вам, как эти части сочетаются друг с другом. Кроме того, вместо использования представления на основе классов, такого как TemplateView, вы можете написать обычное представление, которым, возможно, будет проще манипулировать.

jastr 08.01.2019 03:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
455
0

Другие вопросы по теме