Как использовать несколько форм на одной странице?

В моем проекте джанго необходимо на одной странице использовать сразу 4 формы связанных с моделью. Я попробовал реализовать данное решение с помощью prefix для каждой формы. Формы удалось отобразить в html шаблоне, но не удается сохранить данные в бд. Почему? Вот мой код:

views.py:

def dog(request):
error = ''
if request.method == 'POST':
    form2 = SpeedsForms(request.POST, prefix='form2')
    form3 = DogsForms(request.POST, prefix='form3')
    form4 = ColorForms(request.POST, prefix='form4')
    form5 = DogRequestsForm(request.POST, prefix='form5')
    if form2.is_valid() and form3.is_valid() and form4.is_valid() and form5.is_valid():
        form2.save()
        form3.save()
        form4.save()
        form5.save()
        return redirect('home')
    else:
        error = 'Форма заполненна некорректно'

form2 = SpeedsForms()
form3 = DogsForms()
form4 = ColorForms()
form5 = DogRequestsForm()
data = {
    'form2': form2,
    'form3': form3,
    'form4': form4,
    'form5': form5,
    'error': error
}
return render(request, 'main/dogsform.html', data)

мой urls.py:

path('dog', views.dog, name='dogsform')

мой forms.py:

    class ColorForms(ModelForm):
    class Meta:
        model = Color
        fields = ['temp', 'correct', 'top', 'bottom']
        widgets = {
            'temp': NumberInput(attrs={
                'class': 'form-control',
                'placeholder': 'temp'
            }),
            'correct': NullBooleanSelect(attrs={
                'class': 'form-control',
                'placeholder': 'correct'
            }),
            'top': NumberInput(attrs={
                'class': 'form-control',
                'placeholder': 'top'
            }),
            'bottom': NumberInput(attrs={
                'class': 'form-control',
                'placeholder': 'bottom'
            }),
        }

class SpeedsForms(ModelForm):
    class Meta:
        model = Speed
        fields = ['start',  'end']
        widgets = {
            "start": TimeInput(attrs={
                'class': 'form-control',
                'placeholder': "start"
            }),
            "end": TimeInput(attrs={
                'class': 'form-control',
                'placeholder': "end"
            })
        }

class DogsForm(ModelForm):
    class Meta:
        model = Dog
        fields = ['name', 'number', 'Speed', 'DataTime']
        widgets = {
            "name": TextInput(attrs={
                'class': 'form-control',
                'placeholder': "name"
            }),
            "number": NumberInput(attrs={
                'class': 'form-control',
                'placeholder': "number"
            }),
            "Speed": SelectMultiple(attrs={
                'class': 'form-control',
                'placeholder': "Speed"
            }),
            "DataTime": DateTimeInput(attrs={
                'class': 'form-control',
                'placeholder': "DataTime"
            }),
        }

class DogRequestsForm(ModelForm):
    class Meta:
        model = DogRequest
        fields = ['id_name', 'Color', 'Dog']
        widgets = {
            'id_name': NumberInput(attrs={
                'class': 'form-control',
                'placeholder': 'id_name'
            }),
            'Color': SelectMultiple(attrs={
                'class': 'form-control',
                'placeholder': 'Color'
            }),
            'Dog': SelectMultiple(attrs={
                'class': 'form-control',
                'placeholder': 'Dog'
            }),
        }

И наконец мой HTMl:

    {% block content %}
    <div class="features">
        <h1>Color</h1>
        <form method="post">
            {% csrf_token %}<br>
            {{ form4.temp }}<br>
            {{ form4.correct }}<br>
            {{ form4.top }}<br>
            {{ form4.bottom }}<br>
            <button class="btn btn-success" type="submit">Сохранить</button>
            <span>{{ error }}</span>
        </form>
        <form method="post">
            {% csrf_token %}<br>
            {{ form2.start }}<br>
            {{ form2.end }}<br>
            <button class="btn btn-success" type="submit">Сохранить</button>
            <span>{{ error }}</span>
        </form>
        <form method="post">
            {% csrf_token %}<br>
            {{ form3.name }}<br>
            {{ form3.number }}<br>
            {{ form3.Speed}}<br>
            {{ form3.DataTime }}<br>
            <button class="btn btn-success" type="submit">Сохранить</button>
            <span>{{ error }}</span>
        </form>
         <form method="post">
            {% csrf_token %}<br>
            {{ form5.id_name}}<br>
            {{ form5.Color}}<br>
            {{ form5.Dog}}<br>
            <button class="btn btn-success" type="submit">Сохранить</button>
            <span>{{ error }}</span>
        </form>
    </div>
{% endblock %}

При этом, если я уберу prifix например для color другие формы перестают отображаться на странице, но color успешно сохраняется в бд. Что нужно исправить чтобы успешно сохранять данные из всех форм? Так же буду благодарен если подскажете, как поступить с связанными моделями? Ведь например в форме номер 5 я использую связанные модели (color и dog) которые мне необходимо создать ранее чем я заполню форму номер 5.

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