Ошибка Django formset: несколько добавленных значений не сохраняются, сохраняется только последнее значение
Я использую Django's formset для добавления функции добавления нескольких форм на одной странице. Я хочу принимать все поля модели из формы и сохранять несколько объектов через кнопку '+' только для поля часа. В настоящее время приведенный ниже код принимает только поле часа в форме.
- In order to receive input of all fields from the form, is it necessary to input all fields in forms.py?
- 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 + '-');
Я удалил из заменяемой части в. После удаления функция кнопки '+' была активирована. Кнопка '+' не работала, пока я не удалил заменяющую часть.