Как отобразить несколько наборов форм друг в друге?
На сайте форма используется для предоставления данных кейсу, но поскольку их может быть несколько на сайте, она создается как набор форм. Кроме того, каждый случай может иметь несколько m2m-отношений, которые также являются набором форм. Поэтому второй набор форм может использоваться для каждого из первых наборов форм.
Но как получить и отправить туда данные? Могут ли префиксы создаваться динамически или есть другой способ?
Мой текущий подход заключается в том, чтобы иметь оба набора форм как таковые, но иметь второй набор с итерированным префиксом.
view.py
def rezept_lookup(request, my_id):
b = Auftrag.objects.filter(id=my_id).first().messung_auftrag.all().count()
InhaltFormSet = formset_factory(InhaltForm, extra=5)
FormulierungFormSet = formset_factory(FormulierungForm, extra=0)
q = Auftrag.objects.filter(id=my_id).first().messung_auftrag.all()
b = [x.messung_rezept for x in q]
formset = FormulierungFormSet(request.POST or None, prefix="rezept", initial=[{'bindemittel_name': x.bindemittel_name,
'messung_id': x.messung_id,
'bindemittel_menge': x.bindemittel_menge,
'untergrund_name': x.untergrund_name,
'schichtdicke': x.schichtdicke,
'isActive': x.isActive,
'rezept_name': x.rezept_name } for x in b])
formset_inline = InhaltFormSet(request.POST or None, prefix=[f"inhalt_{n}" for n in range(0,5,1)])
if request.method == "POST":
if formset.is_valid():
for form in formset:
temp = form.save(commit=False)
temp.save()
context = {
"formset":formset,
"formset_inline":formset_inline,
}
return render(request, "template.html", context)
template.html
<form method="post" action="{% url 'Farbmetrik:rezept_lookup' my_id=my_id %}"> {% csrf_token %}
{{ formset.management_form }}
{{ formset.non_field_errors }}
{{ formset_inline.management_form }}
{{ formset_inline.non_field_errors }}
<div class="main_form">
{% for p in formset %}
<table border="1">
<tr>
<th>{{ p.rezept_name }}</th>
<th>{{ p.messung_id }}</th>
</tr>
<tr>
<th>Bindemittel Name: </th>
<th>Bindemittel Menge: </th>
<th>Untergrund: </th>
<th>Schichtdicke: </th>
<th>Aktiv: </th>
</tr>
<tr>
{{p.id}}
{{p.ORDER}}
{{p.DELETE}}
{{p.user_name}}
{{p.usergroup_name}}
<th>{{ p.bindemittel_name }}</th>
<th>{{ p.bindemittel_menge }}</th>
<th>{{ p.untergrund_name }}</th>
<th>{{ p.schichtdicke }}</th>
<th>{{ p.isActive }}</th>
</tr>
{% for q in formset_inline %}
<tr>
<th>{{ q.produkt }}</th>
<th>{{ q.menge }}</th>
</tr>
{% endfor %}
</table>
<p></p>
{% endfor %}
</div>
{% for dict in formset.errors %}
{% for error in dict.values %}
{{ error }}
{% endfor %}
{% endfor %}
<input class="button_w" type="submit" value="Speichern"/>
</form>