Как создать форму/форму Django с полями Modelchoice, имеющими значения из разных наборов запросов

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

Я пробовал с помощью формы.

Форма:

class ValueForm(forms.Form):
    value = forms.ModelChoiceField(queryset = ValueTable.objects.all())

Вид:

filter_value1 = ValueTabel.objects.filter(group = 1)
filter_value2 = ValueTabel.objects.filter(group = 3)
TmpFormSet = formset_factory(ValueForm, extra=0)
form = TmpFormSet(queryset=filter_value1,filter_value2)

Вот мои записи в базе:

ValueTable(group, value):
1, Value1
1, Value2
1, Value3
2, Value4
3, Value5
3, Value6


Group(group, attribute)
1, attribute1
2, attribute2
3, attribute1

Выбрав атрибут1 в группе моделей (запись 1 и 3), я бы отобразил одновременно две формы со следующими вариантами:

modelchoicefield 1:
Value1
Value2
Value3

modelchoicefield 2:
Value5
Value6

Как я могу вручную добавить в набор форм два набора запросов?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
142
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Набор форм используется для отображения одной формы для каждого экземпляра модели и позволяет вам устанавливать пользовательские параметры только для всех экземпляров.

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

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

В приведенном вами примере это будет выглядеть примерно так:

value_queryset1 = ValueTabel.objects.filter(group = 1)
value_queryset2 = ValueTabel.objects.filter(group = 3)
value_querysets = [value_queryset1, value_queryset2]
value_forms = []

for value_queryset in value_querysets:
    value_form = ValueForm()
    value_form.fields["value"].queryset = value_queryset
    value_forms.append(value_form)

Вы также можете переопределить метод init метода ValueForm, чтобы он выглядел немного менее беспорядочным, но технически они одинаковы.

Я надеюсь, что это имеет смысл и поможет вам понять это.

Спасибо за Ваш ответ. После создания value_forms я передаю его в шаблон и отображаю в форме: <form method = "POST" class = "post-form">{% csrf_token %} {% for form in value_forms %} {{ form.as_p }} {% endfor %} <button type = "submit" class = "save btn btn-default">Create</button> В результате у меня есть два поля выбора модели, что нормально, но вернемся к представлению, я получаю в сообщении только значение второго отображается поле.

Steve 07.04.2019 20:42

Вы должны использовать параметр ˋprefix` при создании экземпляра формы, см. docs.djangoproject.com/en/2.1/ref/forms/api поиск префикса формы.

Jonathan Liuti 08.04.2019 01:28

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