Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Django – 단일 보기에서 여러 양식 처리

<시간/>

때때로 우리는 단일 함수나 보기에서 여러 양식을 처리해야 합니다. 이 기사에서 우리는 동시에 동일한 보기에서 두 개의 양식을 처리하는 함수를 작성하는 방법을 볼 것입니다. 많은 경우에 편리합니다. 우리는 두 가지 이상의 양식도 다룰 것입니다.

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에서 양식 데이터를 저장하고 두 양식이 모두 맞는지 확인합니다.

출력


Django – 단일 보기에서 여러 양식 처리