কখনো কখনো আমাদের একটি ফাংশন বা ভিউতে একাধিক ফর্ম হ্যান্ডল করার প্রয়োজন পড়ে। এই আর্টিকেলে, আমরা দেখব কিভাবে একটি ফাংশন লিখতে হয় যা একই সময়ে একই ভিউতে দুটি ফর্ম হ্যান্ডল করবে। এটি অনেক ক্ষেত্রে উপকারী; আমরা দুইটির চেয়েও বেশি ফর্ম হ্যান্ডল করতে পারি।
একটি ডজ্যাঙ্গো প্রজেক্ট এবং একটি অ্যাপ তৈরি করুন, আমি প্রজেক্টের নাম দিয়েছি "multipleFormHandle" এবং অ্যাপের নাম "formhandlingapp"।
INSTALLED_APPS-এ অ্যাপ ইনক্লুড করা এবং প্রজেক্টের url-এ অ্যাপের url ইনক্লুড করা সরি afor কিছু বেসিক কাজ করুন।
এখন অ্যাপে 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'),
]
এখানে, আমরা views সেট আপ করেছি এবং আমাদের viewset-কে ভিউ হিসেবে ব্যবহার করেছি। আমরা এখানে viewset ব্যবহার করব।
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>
এটি আমাদের ফ্রন্টএন্ড যেখানে আমরা একক ফর্ম এলিমেন্টের নিচে একটি সাবমিট বাটনসহ দুটি ডজ্যাঙ্গো ফর্ম রেন্ডার করেছি।
আমি স্টাইল যোগ করব না, কারণ এখানে আমরা কনসেপ্ট এবং করার পদ্ধতি শিখছি।
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)
এখানে আমরা একটি viewset তৈরি করেছি, আমরা রেন্ডার করার জন্য দুটি ফর্ম সংজ্ঞায়িত করেছি একটি হলো student form এবং অন্যটি teacher form। আমরা যে HTML রেন্ডার করব সেটি সংজ্ঞায়িত করেছি। ফর্ম সাবমিট হলে কী হবে সেটা get_success_url-এ সংজ্ঞায়িত করেছি। forms_valid-এ, আমরা ফর্ম ডেটা সেভ করেছি এবং যাচাই করেছি দুটি ফর্মই ঠিক আছে কিনা।
আউটপুট
