때때로 우리는 단일 함수나 보기에서 여러 양식을 처리해야 합니다. 이 기사에서 우리는 동시에 동일한 보기에서 두 개의 양식을 처리하는 함수를 작성하는 방법을 볼 것입니다. 많은 경우에 편리합니다. 우리는 두 가지 이상의 양식도 다룰 것입니다.
Django 프로젝트와 앱을 만들고 프로젝트 이름을 "multipleFormHandle"로 지정했습니다. 앱을 "formhandlingapp"으로 지정합니다.
settings.py에 앱을 포함하는 것과 같은 몇 가지 기본적인 작업을 수행합니다. INSTALLED_APPS를 만들고 프로젝트의 url에 앱의 URL을 포함합니다.
이제 forms.py를 만듭니다. 앱 및 앱 디렉토리의 "템플릿" 폴더. home.html 추가 템플릿에서.
multi-form_view 설치 라이브러리 -
pip install multi_form_view
예시
이제 url.py에서 앱의 -
from django.urls import path,include from . import views urlpatterns = [ path('',views.SchoolData.as_view(),name='home'), ]
여기에서 보기를 설정합니다. 뷰셋 사용 보기로. viewset을 사용할 것입니다. 여기.
models.py에서 -
from django.db import models # Create your models here. class StudentData(models.Model): name=models.CharField(max_length=100) standard=models.CharField(max_length=100) section=models.CharField(max_length=100) class TeachertData(models.Model): name=models.CharField(max_length=100) ClassTeacherOF=models.CharField(max_length=100) Salary=models.CharField(max_length=100)
양식 데이터를 모델에 저장할 것이기 때문에 두 가지 모델을 만들었습니다.
forms.py에서 -
from django import forms from .models import TeachertData,StudentData class StudentForm(forms.ModelForm): class Meta: model=StudentData fields="__all__" class TeacherForm(forms.ModelForm): class Meta: model=TeachertData fields="__all__"
여기에서 우리는 보기에서 프런트엔드에 렌더링할 모델 양식을 만들었습니다.
home.html에서 -
<!DOCTYPE html> <html> <head> <title>tut</title> </head> <body> <form method="post" enctype="multipart/form-data"> {% csrf_token %} <label><h3>Teacher</h3></label> //accessing form 1 from view {{ forms.teacher_form.as_p }} <label><h3>Student</h3></label> //accessing form 2 from view {{ forms.student_form.as_p }} <input type="submit" value="submit"/> </form> </body> </html>
단일 양식 요소와 단일 제출 버튼으로 두 개의 Django 양식을 렌더링하는 프론트엔드입니다.
여기서 우리는 개념과 방법을 배우기 때문에 스타일을 추가하지 않겠습니다.
views.py에서 -
from django.shortcuts import render from .forms import StudentForm,TeacherForm from django.views.generic.list import ListView from django.urls import reverse from multi_form_view import MultiModelFormView # Create your views here. class SchoolData(MultiModelFormView): form_classes = { 'student_form' : StudentForm, 'teacher_form' : TeacherForm, } template_name = 'home.html' def get_success_url(self): return reverse('home') def forms_valid(self, forms): student = forms['student_form'].save(commit=False) teacher=forms['teacher_form'].save(commit=False) return super(SchoolData, self).forms_valid(forms)
여기에서 viewset을 만들었습니다. , 렌더링할 두 가지 양식을 정의합니다. 하나는 학생 양식입니다. 다른 하나는 교사 양식입니다. . 렌더링해야 할 HTML을 정의했습니다. get_success_url에서 양식을 제출할 때 수행할 작업을 정의합니다. form_valid에서 양식 데이터를 저장하고 두 양식이 모두 맞는지 확인합니다.
출력