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?
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>