บางครั้งเราจำเป็นต้องจัดการกับหลายรูปแบบในฟังก์ชันหรือมุมมองเดียว ในบทความนี้ เราจะมาดูวิธีการเขียนฟังก์ชั่นที่จะจัดการกับสองรูปแบบในเวลาเดียวกันและในมุมมองเดียวกัน มีประโยชน์ในหลายกรณี เราจะจัดการมากกว่าสองรูปแบบด้วย
สร้างโปรเจ็กต์ 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 เราบันทึกข้อมูลแบบฟอร์มและตรวจสอบว่าทั้งสองแบบฟอร์มถูกต้องหรือไม่
ผลลัพธ์
