Я создал форму CreateView с моделью Parent (с именем ' Entrada ') и (несколькими) дочерними моделями (с именем ' BalaMateriesPrimeres ') в качестве набора форм. Эти формы создаются динамически с помощью JS, который я создал, поэтому я могу добавить столько детей, сколько захочу (вместо добавления одного за другим с elo80ka плагином динамической формы ). Но проблема в том, что набор форм недействителен. При печати набора форм методом def post я получаю html-теги, но поле ' value ' каждого из них пустое. Это соответствующий код:
forms.py
class EntradaForm(ModelForm):
class Meta:
model = Entrada
exclude = ()
class BalaMateriesPrimeresForm(ModelForm):
class Meta:
model = BalaMateriesPrimeres
fields = ['quilos', 'material', 'cost_unitari']
BalaMateriesPrimeresFormSet = inlineformset_factory(Entrada, BalaMateriesPrimeres, form=BalaMateriesPrimeresForm, can_delete=True, extra=1)
views.py
class EntradaCreateUpdateView(LoginRequiredMixin, UpdateView):
model = Entrada
form_class = EntradaForm
formset_class = BalaMateriesPrimeresFormSet
def get_context_data(self, **kwargs):
data = super(EntradaCreateUpdateView, self).get_context_data(**kwargs)
if self.request.POST:
data['bales_materies_primeres'] = BalaMateriesPrimeresFormSet(self.request.POST)
data['materials'] = Material.objects.all()
else:
data['bales_materies_primeres'] = BalaMateriesPrimeresFormSet()
data['materials'] = Material.objects.all()
return data
def get_object(self):
self.creating = 'pk' not in self.kwargs
if self.creating:
return None # Sucess
else:
obj = super().get_object()
return obj
def post(self, request, *args, **kwargs):
form = self.get_form()
formset = BalaMateriesPrimeresFormSet(request.POST, prefix='bales_materies_primeres')
if form.is_valid() and formset.is_valid():
return self.form_valid(form, formset)
else:
return self.form_invalid(form, formset)
def form_valid(self, form, formset):
self.object = form.save()
for fmset in formset:
fmset.save()
return super(EntradaCreateView, self).form_valid(form)
form.html
<form class="own-form" action="" method="post">
{% csrf_token %}
{% for hidden_field in form.hidden_fields %}
{{ hidden_field }}
{% endfor %}
<h2 class="text-center text-header"> Crear una nova entrada</h2>
<!-- Formulari d'entrada -->
<div class="form-group">
{% for field in form.visible_fields %}
<div class="form-group row">
<div class="col-4 text-center">{{ field.label_tag }}</div>
<div class="col-8">{{ field }}</div>
{% if field.help_text %}
<small class="form-text text-muted">{{ field.help_text }}</small>
{% endif %}
</div>
{% endfor %}
</div>
<!-- /Formulari d'entrada -->
<hr>
<!-- Formulari de Material -->
<div class="form-group form-material-box row form-0">
<div class="col-3 text-center">
<label>Pes aproximat: </label>
<input type="number" id="kg_0">
</div>
<div class="col-3 text-center">
<label>Bales a crear: </label>
<input type="number" id="num_boxes_0">
</div>
<div class="col-3 text-center">
<label>Material: </label>
<br>
<select name="item_id" id="material_0">
{% for material in materials %}
<option value="{{ forloop.counter }}">{{ material }}</option>
{% endfor %}
</select>
</div>
<div class="col-3 text-center">
<button type="button" id="create_boxes_0" class="btn btn-danger">Crea</button>
</div>
<!-- Nested forms with desired number of boxes -->
<div id="nested_forms_0">
{{ bales_materies_primeres.management_form }}
{% for bala in bales_materies_primeres %}
<div class="row" id="box_0">
<div class="col-3 text-center">
<h5>Bala #1: </h4>
</div>
<div class="col-2 text-center">
{{ bala.quilos }}
</div>
<div class="col-2 text-center" >
{{ bala.material }}
</div>
<div class="col-2 text-center" >
{{ bala.cost_unitari }}
</div>
<div class="col-3 text-center">
<button type="button" id='remove_box_0' class="btn btn-danger">Elimina Bala</button>
</div>
{% endfor %}
</div> <!-- /Bala form -->
</div> <!-- /Nested forms -->
</div> <!-- /Form -->
<!-- /Formulari de Material -->
<p>
<input id="crear" class="btn btn-secondary btn-lg btn-block btn-option btn-form" type="submit" value="Crear" />
</p>
код JavaScript :
https://pastebin.com/i87mqAaG
Что я пробовал:
-Да, я проверил значение TOTAL_FORMS в инструментах разработки Chrome. Также вся информация есть там, как Панель инструментов отладки Django говорит
-При печати набора форм сразу после его получения возвращается структура HTML без значений
-Если я печатаю kwargs в def post метод, я ничего не получаю.
Я не знаю, что мне не хватает, но у меня была эта проблема в течение нескольких дней.