ฉันใช้เวลาสองสามวันในการสร้างเทมเพลตฟอร์มที่ใช้ซ้ำได้เพื่อสร้างและอัปเดตโมเดลในรูปแบบ Django โปรดทราบว่ากำลังใช้ ModelForm เพื่อเปลี่ยนแปลงหรือสร้างวัตถุ ฉันกำลังใช้ bootstrap เพื่อจัดรูปแบบฟอร์มของฉัน ฉันเคยใช้ 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 Code
Note: กำลังใช้โมดอล bootstrap4 เพื่อขจัดความยุ่งยากในการสร้างมุมมองจำนวนมาก อาจจะดีกว่าถ้าใช้ CreateView หรือ UpdateView ทั่วไป ลิงก์ Bootstrap และ 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>
รหัส Javascriptอย่าลืมโหลดสิ่งนี้ใน$(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')
});