Сырой ввод записывается, но данные не сохраняются, выдавая ошибку "это поле обязательно для заполнения"
Для контекста, у меня есть форма, в которой пользователь заполняет данные о работе и может выбрать, кто был на этой работе из существующего списка работников, и ввести их часы, ставки и общую зарплату. Я реализовал скрипт, чтобы пользователь мог "добавить" в форму больше работников. Основная проблема заключается в том, что данные не сохраняются специально для поля часов и ставок, хотя поле зарплаты сохраняется, поэтому я не могу отправить всю форму. Учитывая, что JS находится на стороне клиента, скорее всего, это проблема django, но я все равно проверил это, избавившись от своего скрипта
Модель заработной платы:
class EmployeeWage(models.Model):
job = models.ForeignKey(Operating_Budget, on_delete=models.CASCADE, null=True, blank=True)
worker = models.ForeignKey(EmployeeRecord, on_delete=models.CASCADE, null=True, blank=True)
wages = models.DecimalField(max_digits=10, decimal_places=2)
hours = models.DecimalField(max_digits=10, decimal_places=2, default=0)
rates = models.DecimalField(max_digits=10, decimal_places=2,default=0)
Вот моя форма заработной платы:
class WorkerWagesForm(forms.ModelForm):
worker = forms.ModelChoiceField(queryset=EmployeeRecord.objects.all(), label="")
wages = forms.DecimalField(label="", max_digits=10, decimal_places=2)
hours = forms.DecimalField(label="", max_digits=10, decimal_places=2)
rates = forms.DecimalField(label="", max_digits=10, decimal_places=2)
class Meta:
model = EmployeeWage
fields = ('worker', 'wages', 'hours', 'rates')
class JobWorkerWageFormSetBase(BaseInlineFormSet):
def clean(self):
super().clean()
for form in self.forms:
if form.cleaned_data.get('hours') is None:
form.add_error('hours', 'Hours are required.')
if form.cleaned_data.get('rates') is None:
form.add_error('rates', 'Rates are required.')
WorkerWagesFormSet = inlineformset_factory(Operating_Budget, EmployeeWage, formset = JobWorkerWageFormSetBase, fields=('worker', 'wages', 'hours', 'rates'), extra=1, can_delete=True)
И просмотр:
def addrev(request):
if request.method == 'POST':
print(request.POST)
job_form = Revenue(request.POST)
formset = WorkerWagesFormSet(request.POST, request.FILES)
print(formset.data)
if job_form.is_valid() and formset.is_valid():
print("Job Form cleaned data:", job_form.cleaned_data)
job = job_form.save()
job_worker_wages = formset.save(commit=False)
for job_worker_wage in job_worker_wages:
job_worker_wage.job = job
job_worker_wage.save()
worker = job_worker_wage.worker
if worker:
worker.job_completed += 1
worker.save()
print (worker)
return redirect('revenue')
else:
print(formset.errors)
print(job_form.errors)
else:
job_form = Revenue()
formset = WorkerWagesFormSet()
return render(request, 'addrev.html', {
'job_form': job_form,
'formset': formset,
})
Вот сообщение об ошибке:
[{'hours': ['This field is required.', 'Hours are required.'], 'rates': ['This field is required.', 'Rates are required.']}]
Я несколько раз проверял, отличаются ли типы полей в моделях и формах, но не нашел никаких различий. Все остальные вводимые данные были корректны.
Любая помощь будет оценена по достоинству! Спасибо