हमें कभी-कभी एक ही फ़ंक्शन या दृश्य में कई रूपों को संभालने की आवश्यकता होती है। इस लेख में, हम देखेंगे कि एक फ़ंक्शन कैसे लिखना है जो एक ही समय में और एक ही दृश्य में दो रूपों को संभालेगा। यह कई मामलों में आसान है; हम दो से अधिक रूपों को भी संभालेंगे।
एक Django प्रोजेक्ट और एक ऐप बनाएं, मैंने प्रोजेक्ट का नाम "multipleFormHandle" . रखा और ऐप को "formhandlingapp" के रूप में।
कुछ बुनियादी चीज़ें करें जैसे कि settings.py . में ऐप को शामिल करना INSTALLED_APPS और प्रोजेक्ट के url. . में ऐप्लिकेशन का url शामिल करें
अब forms.py . बनाएं ऐप में और ऐप निर्देशिका में "टेम्पलेट्स" फ़ोल्डर। home.htmlजोड़ें टेम्पलेट्स में।
बहु-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'),
] यहां, हम दृश्य setup सेट करते हैं और हमारे व्यूसेट . का उपयोग करें दृश्य के रूप में। हम व्यूसेट . का उपयोग करने जा रहे हैं यहाँ।
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 . में हम प्रपत्र डेटा सहेजते हैं और सत्यापित करते हैं कि दोनों प्रपत्र सही हैं या नहीं।
आउटपुट
