আমরা দুইভাবে ফর্ম লেআউট বানাতে পারি :
- সম্পূর্ণ কাস্টমাইজ | normal form
- ব্যাসিক কাস্টমাইজ | loop form
উদাহরণ সম্পূর্ণ কাস্টমাইজ : ডিফল্ট ফর্ম
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
{% extends 'base.html' %}
{% block content %}
<form action="/" method="post">
{% csrf_token %}
{{ form.as_p() }}
<input type="submit" value="Submit">
</form>
{% endblock %}
এই উদাহরণটি MyModel মডেলের জন্য একটি ডিফল্ট ফর্ম তৈরি করে। ফর্মটি name এবং email ক্ষেত্রগুলিকে সংজ্ঞায়িত করে। ফর্মটি base.html টেমপ্লেট থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়। base.html টেমপ্লেটটি একটি সাধারণ HTML ফর্ম তৈরি করে।
এই উদাহরণটি form.as_p() টেমপ্লেট ট্যাগ ব্যবহার করে ফর্মের ক্ষেত্রগুলি প্রদর্শন করে। form.as_p() ট্যাগটি ফর্মের ক্ষেত্রগুলির একটি HTML তালিকা তৈরি করে।
উদাহরণ সম্পূর্ণ কাস্টমাইজ : কাস্টম ফর্ম
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].label = 'Your name (required)'
self.fields['email'].label = 'Your email (required)'
{% extends 'base.html' %}
{% block content %}
<form action="/" method="post">
{% csrf_token %}
<input type="text" name="name" placeholder="Your name (required)">
<input type="email" name="email" placeholder="Your email (required)">
<input type="submit" value="Submit">
</form>
{% endblock %}
উদাহরণ সম্পূর্ণ কাস্টমাইজ : বুটস্ট্র্যাপ লেআউট ফর্ম
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].widget = forms.TextInput(attrs={'class': 'form-control'})
self.fields['email'].widget = forms.EmailInput(attrs={'class': 'form-control'})
{% extends 'base.html' %}
{% block content %}
<form action="/" method="post">
{% csrf_token %}
<div class="form-group">
<label for="name">Your name (required)</label>
<input type="text" name="name" id="name" class="form-control" placeholder="Your name">
</div>
<div class="form-group">
<label for="email">Your email (required)</label>
<input type="email" name="email" id="email" class="form-control" placeholder="Your email">
</div>
<input type="submit" value="Submit" class="btn btn-primary">
</form>
{% endblock %}
এই উদাহরণটি MyModel মডেলের জন্য একটি বুটস্ট্র্যাপ লেআউট ফর্ম তৈরি
উদাহরণ ব্যাসিক কাস্টমাইজ : Loop ফর্ম
লুপ দিয়ে ডাইনামিক ভাবে একটা একটা নাকরে একসাথে সব ফর্ম এর কাজ করতে পারি।
class EmployeeIDDateFilterForm(forms.Form):
id_no = forms.CharField(max_length=20, label='Employee ID')
start_date = forms.DateField(label='Start Date', required=True,)
end_date = forms.DateField(label='End Date', required=True)
def __init__(self, *args, **kwargs):
super(EmployeeIDDateFilterForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.widget.attrs.update({
'class': 'form-control form-control-sm',
'id': f"{field_name}",
})
<form action="" method="post">
{% csrf_token %}
{% for field_name, field in form %}
<div class="form-group">
<label for="{{ field_name }}">{{ field.label }}</label>
{{ field }}
</div>
{% endfor %}
<button type="submit" class="btn btn-primary">Submit</button>
</form>
উদাহরণ ব্যাসিক কাস্টমাইজ : Loop ফর্ম স্পেসিফিক কোনো ফর্ম ফিল্ড এর স্টাইল পরিবর্তন
যদি স্পেসিফিক কোনো ফর্ম ফিল্ড এর স্টাইল পরিবর্তন করতে হয়
class EmployeeIDDateFilterForm(forms.Form):
id_no = forms.CharField(max_length=20, label='Employee ID')
start_date = forms.DateField(label='Start Date', required=True,)
end_date = forms.DateField(label='End Date', required=True)
def __init__(self, *args, **kwargs):
super(EmployeeIDDateFilterForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
if field_name == 'id_no':
field.widget.attrs.update({
'class': 'form-control form-control-sm abc-class',
'id': f"{field_name}",
})
else:
field.widget.attrs.update({
'class': 'form-control form-control-sm',
'id': f"{field_name}",
})
উদাহরণ Bootstrap : Loop ফর্ম
আমরা ৩ কলামের ফরম চাচ্ছি এবং ইনপুট ক্লাস(”form-control”) ব্যবহার করতে চাচ্ছি এজন্য নিচের মত করবো
class ItemForm(forms.Form):
name = forms.CharField(widget=forms.TextInput)
description = forms.CharField(widget=forms.TextInput)
def __init__(self, *args, **kwargs):
super(ItemForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.widget.attrs.update({
'class': 'form-control',
'id': f"defaultForm-{field_name}",
})<form method="post">
{% csrf_token %}
<div class="row">
{% for field in form %}
<div class="col-md-4 mb-4">
<div class="form-group">
<label for="{{ field.auto_id }}">{{ field.label }}</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fas fa-envelope"></i>
</span>
</div>
{{ field }}
</div>
</div>
</div>
{% endfor %}
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>