บางครั้งเราจำเป็นต้องจัดการกับหลายรูปแบบในฟังก์ชันหรือมุมมองเดียว ในบทความนี้ เราจะมาดูวิธีการเขียนฟังก์ชั่นที่จะจัดการกับสองรูปแบบในเวลาเดียวกันและในมุมมองเดียวกัน มีประโยชน์ในหลายกรณี เราจะจัดการมากกว่าสองรูปแบบด้วย
สร้างโปรเจ็กต์ Django และแอป ฉันตั้งชื่อโปรเจ็กต์ว่า "multipleFormHandle" และแอปเป็น "formhandlingapp"
ทำสิ่งพื้นฐานบางอย่าง เช่น รวมแอปใน settings.py INSTALLED_APPS และรวม url ของแอปใน url ของโปรเจ็กต์
ตอนนี้สร้าง forms.py ในแอปและโฟลเดอร์ "เทมเพลต" ในไดเรกทอรีแอป เพิ่ม home.html ในเทมเพลต
ติดตั้ง multi-form_view ห้องสมุด −
pip install multi_form_view
ตัวอย่าง
ตอนนี้อยู่ใน urls.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)
ที่นี่เราสร้าง ชุดการดู เรากำหนดสองรูปแบบเพื่อแสดงหนึ่งคือ แบบฟอร์มนักเรียน และอีกอันคือ แบบครู . เรากำหนด HTML ที่เราต้องแสดง เรากำหนดสิ่งที่ต้องทำเมื่อส่งแบบฟอร์มภายใต้ get_success_url ใน form_valid เราบันทึกข้อมูลแบบฟอร์มและตรวจสอบว่าทั้งสองแบบฟอร์มถูกต้องหรือไม่
ผลลัพธ์