[Fixed]-Django: two forms in one view

1👍

You could use Inline formsets.

In view.py firt of all you have to create a new person instance and then use this instance with formset:

from django.forms import inlineformset_factory
ImageFormSet = inlineformset_factory(Person, Image, fields=('image',))

def my_view(request):
    form = PersonForm(request.POST or None)
    if form.is_valid():
        new_person = form.save()
        formset = ImageFormSet(request.POST or None, request.FILES or None, instance=new_person)
        if formset.is_valid():
            formset.save()
            return redirect('persons:main')
    else:
        formset = ImageFormSet(request.POST or None, request.FILES or None)
    return render(request, 'my_template.html', {'formset': formset, 'form': form})

In my_template.html:

<form action="" method="post" enctype="multipart/form-data">
        {{ form.as_p }}
        {{ formset.management_form }}
        {% for frm in formset %}
            {{ frm.as_p }}
        {% endfor %}   
        <input type="submit" value="Create">
</form>

Leave a comment