Как динамически отображать флажки в форме? - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу отобразить опции флажков на основе запросов из представления.

Например, это мой текущий код:

представление:

def new_role_task(response, id):
    ...
    query = Query.objects.filter(id=id)
    if response.method == 'POST':
        form = Form(response.POST)
        if form.is_valid():
            ....
        return redirect(f'/...')
    else:
        form = Form()

    return render(response, ...html', {'form':form, ...})

форма:

FAVORITE_COLORS_CHOICES = [
    ('blue', 'Blue'),
    ('green', 'Green'),
    ('black', 'Black'),
]

class Form(forms.Form):
    checkbox_fields = forms.MultipleChoiceField(
        required=False,
        widget=forms.CheckboxSelectMultiple,
        choices=FAVORITE_COLORS_CHOICES,
    )
    ...

Вместо FAVORITE_COLORS_CHOICES я хочу использовать запросы, которые я бы сделал из самого представления, которое будет динамическим c в зависимости от параметров, передаваемых на страницу.

Например, Я пришел из Rails и внутри Rails, вы можете выполнить sh это на передней или задней стороне, выполнив:

Front:

<%= collection_check_boxes(:post, :author_ids, Author.all, :id, :attribute) %>

Это будет тогда отобразить все записи из модели Author.

Или вы можете определить Author как @authors = Author.where(ids: [1,2,3])

<%= collection_check_boxes(:post, :author_ids, @authors, :id, :attribute) %>

Это затем отобразит всех авторов из запроса, который match.

Я предполагаю, что для Django все, что мне нужно сделать, это перевести мой запрос в формат [('')], а затем каким-то образом заставить его переопределить файл form.py?

Что такое метод для достижения этой цели?

Я думаю, есть 2 вопроса ... Как получить мой запрос в этом F ormat выше, и как получить это в передний конец?

Или это единственный способ сделать это?

{% for author in authors %}
  <div class="form-check"> <input type="checkbox" class="form-check-input" name="author" id="id_author_{{author.id}}" value="{{author.id}}">
    <label class="form-check-label" for="id_author_{{author.id}}">
      {{ author.name }}
    </label>
  </div>
{% endfor %}

Конечно, должен быть лучший способ ....

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