हमें कभी-कभी एक ही फंक्शन या व्यू में मल्टीपल फॉर्म्स को हैंडल करने की आवश्यकता होती है। इस लेख में, हम देखेंगे कि एक ऐसा फंक्शन कैसे लिखा जाए जो एक ही समय में और एक ही व्यू में दो फॉर्म्स को हैंडल करे। यह कई मामलों में उपयोगी है; हम दो से अधिक फॉर्म्स को भी हैंडल कर सकते हैं।
एक Django प्रोजेक्ट और एक ऐप बनाएं, मैंने प्रोजेक्ट को "multipleFormHandle" और ऐप को "formhandlingapp" नाम दिया।
settings.py INSTALLED_APPS में ऐप शामिल करने और प्रोजेक्ट के url में ऐप का url शामिल करने जैसे कुछ बुनियादी काम करें।
अब ऐप में forms.py बनाएं और ऐप डायरेक्टरी में एक "templates" फोल्डर बनाएं। इसमें 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'),
]
यहां, हमने व्यूज सेट किए और अपने व्यूसेट को व्यू के रूप में उपयोग किया। हम यहां व्यूसेट का उपयोग करने जा रहे हैं।
models.py में:
from django.db import models
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>
{{ forms.teacher_form.as_p }}
<label><h3>Student</h3></label>
{{ 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
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 के तहत क्या करना है। forms_valid में, हम फॉर्म डेटा सेव करते हैं और वेरिफाई करते हैं कि दोनों फॉर्म्स सही हैं या नहीं।
आउटपुट
