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

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?

enter image description here

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>
Вернуться на верх