Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Django – จัดการหลายรูปแบบในมุมมองเดียว


บางครั้งเราจำเป็นต้องจัดการกับหลายรูปแบบในฟังก์ชันหรือมุมมองเดียว ในบทความนี้ เราจะมาดูวิธีการเขียนฟังก์ชั่นที่จะจัดการกับสองรูปแบบในเวลาเดียวกันและในมุมมองเดียวกัน มีประโยชน์ในหลายกรณี เราจะจัดการมากกว่าสองรูปแบบด้วย

สร้างโปรเจ็กต์ 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 เราบันทึกข้อมูลแบบฟอร์มและตรวจสอบว่าทั้งสองแบบฟอร์มถูกต้องหรือไม่

ผลลัพธ์


Django – จัดการหลายรูปแบบในมุมมองเดียว