How can I split the two forms so that only one of the two forms in the template is processed?

Have a nice day! I am trying to place two independent forms on one template.

I have them placed but there is a problem that both forms are being checked.

Validation of both forms is being checked. Although I only have one button clicked in the first form. How can I split these two forms so that they are independent? I need the form to be checked separately.

Separately - the first and second forms. When I fill out one form - I get an error because both forms are being checked.

How can I separate the forms - separate the forms during checking. How can I split the two forms so that only one of the two forms in the template is processed?

views.py

def book(request, pk):

    context = {}

    Category_pk_for_form_maim.objects.all().delete()

    filter_qs_category = Category_pk_for_form_category.objects.filter(name_object=pk)
    filter_qs_category = filter_qs_category.values("category_name")

    for item in filter_qs_category:
        entry = item
        new_entry = Category_pk_for_form_maim(categoty_name=entry)
        new_entry.save()

    form_category_1 = Category_pk_for_form_category_Form(request.POST or None)
    form_2 = Form_GPR(request.POST or None)

    if request.method == 'POST':

        if "form_category_1" in request.POST: 
            if form_category_1.is_valid():
                model_instance = form_category_1.save(commit=False)
                name_object = pk
                category_name = model_instance.category_name
                new_entry = Category_pk_for_form_category(name_object=name_object, category_name=category_name)
                new_entry.save()

                return redirect("book-detail", pk)            


        if "form_2" in request.POST:
            if form_2.is_valid():
                model_instance = form_2.save(commit=False)
                name_object = pk
                name_working = model_instance.name_working
                type_izm = model_instance.type_izm
                value_work = model_instance.value_work
                lyudi_norma = model_instance.lyudi_norma
                technik_norma = model_instance.technik_norma
                date_begin = model_instance.date_begin
                date_end = model_instance.date_end
                new_entry = CreateNewGPR(name_object=name_object, name_working=name_working, type_izm=type_izm, value_work=value_work, lyudi_norma=lyudi_norma, technik_norma=technik_norma, date_begin=date_begin, date_end=date_end)
                new_entry.save()

                return redirect("book-detail", pk)

    context['form_category_1'] = form_category_1
    context['form_2'] = form_2

    """ Gets an individual book object from the database, based on its ID/PK. Renders a detail template """
    book = get_object_or_404(ArkiObject_1, pk=pk)

    filter_qs = CreateNewGPR.objects.filter(name_object=pk)
    filter_qs = filter_qs.values("name_working", "type_izm", "value_work", "lyudi_norma", "technik_norma", "date_begin", "date_end")

    context['books'] = filter_qs
    return render(request, 'bookdetail.html', context)

forms.py

class Form_GPR (forms.ModelForm):
    class Meta:
        model = CreateNewGPR
        fields = "name_category", "name_working", "type_izm", "value_work", "lyudi_norma", "technik_norma", "date_begin", "date_end"
        widgets = {
            "name_category": forms.RadioSelect(attrs={"type":"radio"}),
            "date_begin": forms.DateInput(attrs={"class":"form-control", "type":"date"}),
            "date_end": forms.DateInput(attrs={"class":"form-control", "type":"date"}),
            
        }


class Form_Working (forms.ModelForm):
    class Meta:
        model = CreateNewWorkDayForms
        fields = "name_working", "second_name_working", "third_name_working", "value_work_fact", "lyudi_fact", "technik_fact", "date_day"
        widgets = {
            "date_day": forms.DateInput(attrs={"class":"form-control", "type":"date"}),
            "name_working": forms.RadioSelect(attrs={"type":"radio"}),
        }


class Category_pk_for_form_category_Form (forms.ModelForm):
    class Meta:
        model = Category_pk_for_form_category
        fields = "category_name",


class FilterForm(forms.Form):
    name = forms.CharField()

models.py

lass Category_pk_for_form_maim (models.Model):
    categoty_name = models.CharField()
    def __str__(self):
        return self.categoty_name
    

class Category_pk_for_form_category (models.Model):
    name_object = models.IntegerField(verbose_name="Наименование объекта")
    category_name = models.CharField()

 
class CreateNewGPR (models.Model):
    name_object = models.IntegerField(verbose_name="Наименование объекта")
    name_category = models.ForeignKey(Category_pk_for_form_maim, default=0, on_delete=models.CASCADE, verbose_name="Наименование категории/раздела/вида работ")
    name_working = models.CharField(verbose_name="Наименование работы")
    type_izm = models.CharField(choices=TYPE_IZMERENIYA, verbose_name="Единицы измерения")
    value_work = models.FloatField(verbose_name="Объём работ")
    lyudi_norma = models.IntegerField(verbose_name="Нормативные затраты персонала")
    technik_norma = models.IntegerField(verbose_name="Нормативные затраты техники")
    date_begin = models.DateField(verbose_name="Дата начала работ")
    date_end = models.DateField(verbose_name="Дата окончания работ")


class GPRWorkingName (models.Model):
    name_working = models.CharField(verbose_name="Наименование работы по ГПР")  
    def __str__(self):
        return self.name_working 

bookdetail.html

{% load widget_tweaks %}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>title</title>
</head>
<body>
    <div>
        <h4>Выбрать категорию / раздел / вид работ для составления графика</h4>
        <h4>Если отсутствует необходимое название в меню выбора то добавьте в форме ниже</h4>
    </div>
    <br/>
    <hr/>
    <div>
        <form method="POST" class="post-form">
            {% csrf_token %}
            <input type="hidden" name="form_name" value="form1">
            {{form_category_1.as_p}}
            <button type="submit" class="button">Отправить</button>
        </form>
    </div>
    <br/>
    <div>
        <form method="POST" class="post-form">
            {% csrf_token %}
            <input type="hidden" name="form_name" value="form2">
            {{form_2.as_p}}
            <button type="submit" class="button">Отправить</button>
        </form>
    </div>
    <br/>
    <div>
        <table>
            <thead>
                <tr>
                    <th>Наименование работы</th>
                    <th>Единицы измерения</th>
                    <th>Объём работ</th>
                    <th>Нормативные затраты персонала</th>
                    <th>Нормативные затраты техники</th>
                    <th>Дата начала работ</th>
                    <th>Дата окончания работ</th>
                </tr>
            </thead>
            <tbody>
                {% for book in books %}
                <tr>
                    <td>{{ book.name_working }}</td>
                    <td>{{ book.type_izm }}</td>
                    <td>{{ book.value_work }}</td>
                    <td>{{ book.lyudi_norma }}</td>
                    <td>{{ book.technik_norma }}</td>
                    <td>{{ book.date_begin }}</td>
                    <td>{{ book.date_end }}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </div>
</body>
</html>

My suggestion would be to send each form to a different view that validates and processes that specific form. There’s no need, benefit, or value to adding the additional code necessary to try and distinguish between which of the two forms are being submitted in the view.

That’s actually the easiest way to resolve this instead of trying to manage the conditionals involved.

Thank you very much!
Can you please give me some advice on how to do this?
I don’t really understand yet how to direct forms to two views.
Can you please give me some advice?

See the action attribute for the html <form> element. Each form should direct the POST to a different url, where each of those URLs are referring to the view designed to accept the post from that form.