Использование виджета выбора в Django для получения данных из базы данных Postgres - PullRequest
0 голосов
/ 06 января 2019

Я очень новичок в 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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...