Computer >> Máy Tính >  >> Lập trình >> Python

Django - Xử lý nhiều biểu mẫu trong một lần xem

Đôi khi chúng ta cần xử lý nhiều biểu mẫu trong một chức năng hoặc dạng xem. Trong bài viết này, chúng ta sẽ xem cách viết một hàm xử lý hai biểu mẫu cùng một lúc và trong cùng một khung nhìn. Nó rất tiện dụng trong nhiều trường hợp; chúng tôi cũng sẽ xử lý nhiều hơn hai biểu mẫu.

Tạo một dự án Django và một ứng dụng, tôi đặt tên cho dự án là "multipleFormHandle" và ứng dụng là "formhandlingapp".

Thực hiện một số công việc cơ bản như đưa ứng dụng vào settings.py INSTALLED_APPS và bao gồm url của ứng dụng trong url của dự án.

Bây giờ, hãy tạo form.py trong ứng dụng và thư mục "mẫu" trong thư mục ứng dụng. Thêm home.html trong các mẫu.

Cài đặt multi-form_view thư viện -

pip install multi_form_view

Ví dụ

Hiện có trong urls.py của ứng dụng -

from django.urls import path,include
from . import views
urlpatterns = [
   path('',views.SchoolData.as_view(),name='home'),
]

Tại đây, chúng tôi thiết lập chế độ xem và sử dụng bộ xem của chúng tôi dưới dạng xem. Chúng tôi sẽ sử dụng bộ chế độ xem tại đây.

Trong 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)

Chúng tôi đã tạo hai mô hình vì chúng tôi sẽ lưu dữ liệu biểu mẫu trong các mô hình.

Trong form.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__"

Ở đây, chúng tôi đã tạo các biểu mẫu mô hình mà chúng tôi sẽ hiển thị trên giao diện người dùng từ chế độ xem của chúng tôi.

Trong 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>

Đó là giao diện người dùng của chúng tôi, nơi chúng tôi hiển thị hai biểu mẫu Django dưới một phần tử biểu mẫu duy nhất và với một nút gửi duy nhất.

Tôi sẽ không thêm kiểu, vì ở đây chúng ta đang tìm hiểu khái niệm và cách để làm điều đó.

Trong 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)

Ở đây, chúng tôi đã tạo tập hợp quan điểm , chúng tôi xác định hai biểu mẫu để hiển thị một là biểu mẫu sinh viên và cái còn lại là biểu mẫu giáo viên . Chúng tôi đã xác định HTML mà chúng tôi phải kết xuất. Chúng tôi xác định những việc cần làm khi gửi biểu mẫu theo get_success_url. Trong form_valid, chúng tôi lưu dữ liệu biểu mẫu và xác minh xem cả hai biểu mẫu có đúng hay không.

Đầu ra


Django - Xử lý nhiều biểu mẫu trong một lần xem