मैंने Django रूपों में मॉडल बनाने और अद्यतन करने के लिए पुन: प्रयोज्य प्रपत्र टेम्पलेट बनाने की कोशिश करते हुए काफी दिन बिताए हैं। ध्यान दें कि ऑब्जेक्ट को बदलने या बनाने के लिए ModelForm का उपयोग कर रहा है। मेरे रूपों को स्टाइल करने के लिए भी बूटस्ट्रैप का उपयोग कर रहा हूँ। मैंने अतीत में कुछ रूपों के लिए django_form_tweaks का उपयोग किया था, लेकिन मुझे बहुत अधिक टेम्पलेट निर्भरता के बिना कुछ अनुकूलन की आवश्यकता थी। चूंकि मेरे प्रोजेक्ट में पहले से ही jQuery है, इसलिए मैंने अपने रूपों को स्टाइल करने के लिए इसके गुणों का लाभ उठाने का फैसला किया। यहाँ कोड है, और किसी भी रूप के साथ काम कर सकते हैं।
#forms.py
from django import forms
from user.models import User, UserProfile
from .models import Task, Transaction
class AddTransactionForm(forms.ModelForm):
class Meta:
model = Transaction
exclude = ['ref_number',]
required_css_class = 'required'
Views.py
@method_decorator(login_required, name='dispatch')
class TransactionView(View):
def get(self, *args, **kwargs):
transactions = Transaction.objects.all()
form = AddTransactionForm
template = 'pages/transaction.html'
context = {
'active': 'transaction',
'transactions': transactions,
'form': form
}
return render(self.request, template, context)
def post(self, *args, **kwargs):
form = AddTransactionForm(self.request.POST or None)
if form.is_valid():
form.save()
messages.success(self.request, 'New Transaction recorded succesfully')
return redirect('dashboard:transaction')
messages.error(self.request, 'Fill the form')
return redirect('dashboard:transaction')
HTML कोड
नोट: कई दृश्य बनाने की परेशानी को दूर करने के लिए bootstrap4 modal का उपयोग कर रहा हूँ। शायद यह सामान्य CreateView या UpdateView का उपयोग करने के लिए बेहतर है। लिंक बूटस्ट्रैप और jqQery
<div class="modal-body">
<form method="post" class="md-form" action="." enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="row">
<div class="col-md-12">
<div class="form-group row">
<label for="" class="col-sm-4 col-form-label {% if field.field.required %}
required font-weight-bolder text-danger{%endif %}">{{field.label}}</label>
<div class="col-sm-8">
{{field}}
</div>
</div>
</div>
</div>
{% endfor %}
<input type="submit" value="Add Transaction" class="btn btn-primary">
</form>
</div>
जावास्क्रिप्ट कोड को $(document).ready(function() { /* ... */});
फ़ंक्शन में लोड करना याद रखें ।
var $list = $("#django_form :input[type='text']");
$list.each(function () {
$(this).addClass('form-control')
});
var $select = $("#django_form select");
$select.each(function () {
$(this).addClass('custom-select w-90')
});
var $list = $("#django_form :input[type='number']");
$list.each(function () {
$(this).addClass('form-control')
});
var $list = $("form :input[type='text']");
$list.each(function () {
$(this).addClass('form-control')
});
var $select = $("form select");
$select.each(function () {
$(this).addClass('custom-select w-90')
});
var $list = $("form :input[type='number']");
$list.each(function () {
$(this).addClass('form-control')
});