Django сохраняет вложенные наборы форм, которые связаны друг с другом столбец не может быть нулевым ошибка
Имеется два вложенных набора форм, и они связаны друг с другом. Когда я увеличиваю дополнительное поле во втором наборе форм, я получаю ошибку column cannot be null. У меня нет проблем с сохранением обеих форм как одной.
Вот моя ошибка :
Вот мои формы :
class UserTaskForm(forms.ModelForm):
class Meta:
model = UserTask
fields = ['user_id','task_types_id','store_house_id','description']
class TaskSourcesForm(forms.ModelForm):
class Meta:
model = TaskSources
fields = ['product_id', 'product_amount']
TaskSourcesFormSet = modelformset_factory(
TaskSources,
fields=('product_id', 'product_amount',),
extra=2,
)
UserTaskFormFormSet = modelformset_factory(
UserTask,
fields=('user_id','task_types_id','store_house_id','description',),
extra=1,
)
вот мои взгляды :
@login_required(login_url="login")
def addUserTask(request):
user_task_form = UserTaskFormFormSet(queryset=UserTask.objects.none(),initial=[{'user_id': request.user}])
formset = TaskSourcesFormSet(queryset=TaskSources.objects.none())
if request.method == 'POST':
user_task_form = UserTaskFormFormSet(request.POST)
formset = TaskSourcesFormSet(request.POST)
if user_task_form.is_valid():
for form in user_task_form:
user_task = form.save(commit=False)
user_task.author = request.user
user_task.save()
if formset.is_valid():
for form_data in formset:
task_sources = form_data.save(commit=False)
task_sources.user_task_id = UserTask(id = user_task.id)
task_sources.save()
messages.success(request,"Task added successfully!")
return redirect(".")
context = {
"user_task_form" : user_task_form,
"formset" : formset,
}
return render(request,"user/addtask.html",context)
Как сохранить два набора форм модели вместе (относящиеся друг к другу) в одном представлении? Что является неправильной частью, когда я делаю это?
Я подозреваю, что проблема возникает из-за пустых полей в формах вашего набора форм. Вы можете избежать пустых форм с помощью:
for form in user_task_form:
if form.has_changed():
user_task = form.save(commit=False)