Django. Как сохранить данные formset в БД
Коллеги! Нужна ваша помощь. Есть шаблон в котором создается пользовательский набор форм с помощью JS. И когда я пытаюсь сохранить в БД данные которые указал в шаблоне, то по факту у меня с шаблона передает не все данные и делает не полную запись в БД. Причем вьюшка у меня работает с обычной формой и набором форм, данные из набора форм не пишет в БД, по сути даже и не передает их во вьюшку, а данные обычной формы пишутся корректно. Прошу помочь, может кто сталкивался.
model.py
class Section(models.Model):
id = models.AutoField(unique=True, primary_key=True)
house = models.ForeignKey(House, on_delete=models.CASCADE)
name = models.CharField('Название', max_length=64)
forms.py
class SectionForm(forms.ModelForm):
class Meta:
model = Section
fields = ['name']
widgets = {
'name': forms.TextInput(attrs={
'class': 'form-control',
'value': 'Секция '
}),
}
views.py
def create_house(request):
form = HouseForm()
SectionFormSet = formset_factory(SectionForm, extra=0)
if request.method == 'POST':
form = HouseForm(request.POST, request.FILES)
form_section = SectionFormSet(request.POST)
if form.is_valid():
form.save()
if form_section.is_valid():
print(form_section)
for subform in form_section:
subform_save = subform.save(commit=False)
subform_save.house = form.save(commit=False)
subform_save.save()
else:
print(form_section.errors)
return redirect('house')
else:
print(form.errors)
data = {
'form': form,
'SectionFormSet': SectionFormSet(),
}
return render(request, "adminpanel/house/create.html", data)
template
<div class="tab-content">
<div class="tab-panel clearfix" id="tab-sections">
{{ SectionFormSet.management_form }}
<div id="form_set_section" class="row">
{% for formset in SectionFormSet %}
<div class="col-md-12 margin-bottom-20">
<label>Название</label>
<div class="input-group">
{{ formset.name }}
<span class="input-group-btn">
<a href="" class="btn btn-danger">
<i class="fa fa-trash"></i>
</a>
</span>
</div>
</div>
{% endfor %}
<div id="empty_form_section" style="display:none">
<div class="col-md-12 margin-bottom-20">
<label>Название</label>
<div class="input-group">
{{ SectionFormSet.empty_form.name }}
<span class="input-group-btn">
<button type="button" class="btn btn-danger">
<i class="fa fa-trash"></i>
</button>
</span>
</div>
</div>
</div>
</div>
<input id="add_section" type="button" value="Добавить">
</div>
js
$('#add_section').click(function() {
var form_idx = $('#id_form-TOTAL_FORMS').val();
$('#form_set_section').append($('#empty_form_section').html().replace(/prefix/g, form_idx));
$('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
});