Ошибка Django formset: несколько добавленных значений не сохраняются, сохраняется только последнее значение

Я использую Django's formset для добавления функции добавления нескольких форм на одной странице. Я хочу принимать все поля модели из формы и сохранять несколько объектов через кнопку '+' только для поля часа. В настоящее время приведенный ниже код принимает только поле часа в форме.

  1. In order to receive input of all fields from the form, is it necessary to input all fields in forms.py?
  2. With the code below, 'save' function works, but assuming that 5 'hours' field are entered, only the last value is added to DB.

[models.py]

class Supporting(models.Model):
    date = models.DateTimeField(blank=True, null=True)
    student = models.ForeignKey(Student, on_delete=models.CASCADE, blank=False, null=True)
    hour = models.CharField(max_length=2, blank=True, null=True)
    teacher = models.CharField(max_length=50, blank=True, null=True)
    comment = models.TextField(blank=True, null=True)
    technician = models.CharField(max_length=50, blank=True, null=True)

[forms.py]

from django import forms
from django.forms import modelformset_factory
from .models import Supporting

SupportingModelFormset = modelformset_factory(
    Supporting,
    fields=('hour', ),
    extra=1,
    widgets={'name': forms.TextInput(attrs={
        'class': 'form-control',
        })
    }
)

[views.py]

def add_supporting(request):
    if request.method == 'GET':
        formset = SupportingModelFormset(queryset=Supporting.objects.none())
    elif request.method == 'POST':
        formset = SupportingModelFormset(request.POST)
        if formset.is_valid():
            for form in formset:
                if form.cleaned_data.get('hour'):
                    form.save()
            return HttpResponseRedirect('/supporting/')

  return render(request, 'supporting/add.html', {'formset': formset})

[support/add.html]

Для справки, в функции 'cloneMore', var name = $(this).attr('name').replace('-' + (total-1) + '-', '-' + total + '-');

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

Вернуться на верх