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>