Django memiliki sebuah kode sihir yakni formset untuk membuat formulir baik satu ataupun lebih dalam satu halaman. Sehingga kita tak terlalu membuat perulangan sendiri untuk membuat banyak form dalam sekali klik.
Tetapi sebelum memakai kode formset ini kita mesti membuat file form yang akan disimpan di kode formset kita.
Ubahlah file model.py menjadi
from django.db import models
class Formulir(models.Model):
judul = models.CharField(max_length= 50)
deskripsi = models.CharField(max_length=1000)
Mari kita buat file form.py yang berisi kode dibawah ini.
from django import forms
from .models import Formulir
class FormulirForm(forms.ModelForm):
class Meta:
model = Formulir
fields = '__all__'
Saya akan jelaskan kode diatas ini. 'model' merupakan model yang kita gunakan untuk menyimpan, memodifikasi dan menghapus data yang kita gunakan. sedangkan 'fields' merupakan nama coloum yang digunakan. Saya menggunakan kode '__all__' untuk menggunakan semua column yang ada.
Setelah itu mari kita rubah file view.py menjadi
from django.shortcuts import render
# mengimport FormulirForm
from .forms import FormulirForm
# mengimport formset_factory
from django.forms import formset_factory
def formset_view(request):
context ={}
# buat sebuah formset
FormulirFormSet = formset_factory(FormulirForm)
formset = FormulirFormSet()
# tambahkan array context untuk dirender
context['formset']= formset
return render(request, "index.html", context)
Kemudian buat file index.html pada file templates yang memiliki isi
<h3>Formulir Dengan Formset</h3>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<table class='table'>
{{ formset.as_table }}
</table>
<input type="submit" value="Masukan Formulir">
</form>
Bila berhasil maka akan tampil tabel formulirnya.
Cara Membuat Multiple Insert
Kita hanya cukup menambahkan kode 'extra=5' untuk menambahkan 5 formulir tersebut dengan mengubah baris ke 9 menjadi
FormulirFormSet = formset_factory(FormulirForm, extra=5)
Karena kita menginput banyak data dalam sekali klik maka kita membutuhkan kode '{{ formset.management_data }}' pada template index.html.
Setelah tahapan ini selesai maka data yang kita masukan di dalam formulir akan kita simpan ke dalam database kita dengan mengganti file view kita:
from django.shortcuts import render
# mengimport FormulirForm
from .forms import FormulirForm
# mengimport formset_factory
from django.forms import formset_factory
def formset_view(request):
context ={}
# buat sebuah formset
FormulirFormSet = formset_factory(FormulirForm,extra=5)
if request.method == 'POST':
formset = FormulirFormSet(request.POST, request.FILES or None)
if formset.is_valid():
for form in formset:
if form.is_valid():
form.save()
else:
formset = FormulirFormSet()
# tambahkan array context untuk dirender
context['formset']= formset
return render(request, "index.html", context)
Silahkan periksa di halaman admin django, bila semua tahapan ini benar maka data-data akan tersimpan di database kita.
Tidak ada komentar:
Posting Komentar