9. Django Python – CRUD

django python bahasa indonesia

1. Tambah Data

Edit form view tambah_data.

from apps.apps01.forms import FormSiswa
def tambah_siswa(request):
     if request.POST:
         form = FormSiswa(request.POST)
         if form.is_valid():
             form.save()
             form = FormSiswa
             pesan = "Berhasil tambah data!"
         
             context = {         
                  'form': form,         
                  ‘pesan’: pesan,         
             }         
             return render(request, 'tambah-siswa.html', context)  
     else:       
          form = FormSiswa       
          context = {        
                'form': form,       
          }       
          return render(request, 'tambah-siswa.html', context)

Edit file tambah-siswa.html.

{% extends "base.html" %}

{% block content %}
   {% if pesan %}
      {{ pesan }}
   {% endif %}
   <form action="/siswa-tambah/" method="POST" accept-charset="utf-8">
      {% csrf_token %}

      {{ form.as_p }}
      <button>Tambah</button>
   </form>
{% endblock content %}

2. Menampilkan Data

Edit form siswa.html.

{% extends 'base.html' %}

{% block content %}
...
    {% for siswa in list_siswa %}
    ...
           <h5 class="card-title">{{ siswa.nama_lengkap }}</h5>
           <p class="card-text">{{ siswa.nomor }}</p>
           <p class="card-text">{{ siswa.tgl_lahir }}</p>
           <p class="card-text">{{ siswa.jurusan }}</p> 
    ... 
    {% endfor %}
...
{% endblock content %}

3. Menampilkan Data (Semua)

def siswa(request):
   list_siswa = Siswa.objects.all()

   context = {
         'list_siswa': list_siswa,
   }
   return render(request, 'siswa.html', context)

4. Menampilkan Data (Filter -1)

Menampilkan data berdasarkan filter tertentu.

def siswa(request):
   list_siswa = Siswa.objects.filter(jurusan=1)

   context = {
         'list_siswa': list_siswa,
   }
   return render(request, 'siswa.html', context)

5. Menampilkan Data (Filter – 2)

Menampilkan data berdasarkan filter tertentu dan value-nya adalah field selain id-nya.

def siswa(request):
   list_siswa = Siswa.objects.filter(jurusan__nama_jurusan="Teknik Informatika")

   context = {
         'list_siswa': list_siswa,
   }
   return render(request, 'siswa.html', context)

6. Menampilkan Data(Filter – 3)

Limit data yang ditampilkan. Misalkan hanya menampilkan maksimal 2 data.

def siswa(request):
   list_siswa = Siswa.objects.filter(jurusan__nama_jurusan="Teknik Informatika")[:2]

   context = {
         'list_siswa': list_siswa,
   }
   return render(request, 'siswa.html', context)

7. Edit Data

from django.contrib import messages

def edit_siswa(request, nomor_siswa):
   list_siswa = Siswa.objects.get(id=nomor_siswa)
   template = 'edit-siswa.html'
   if request.POST:
      form = FormSiswa(request.POST, instance=list_siswa)
      if form.is_valid():
         form.save()
         messages.success(request, "Berhasil edit data!")
         return redirect('edit_siswa',nomor_siswa=nomor_siswa)
   else:
      form = FormSiswa(instance=list_siswa)
      context = {
         'form': form,
         'siswa': list_siswa,
      }
      return render(request, template, context)
{% for message in messages %}
   {% if message %}
       <div class="alert alert-success">{{ message }}</div>
   {% endif %}
{% endfor %}

<form action="{% url 'edit_siswa' siswa.id  %}" method="POST" accept-charset="utf-8">
      {% csrf_token %}
      {{ form.as_p }}
      <button class="btn btn-primary">Simpan</button>
      <a href="{% url 'siswa' %}" class="btn btn-info">Kembali</a>
</form>
urlpatterns = [
...
    path('siswa-edit/<int:nomor_siswa>', edit_siswa, name='edit_siswa'),
]
<div class="card-body">
   ...
   ...
   <a href="{% url 'edit_siswa' siswa.id %}" class="btn btn-primary">Edit</a>
</div>

8. Hapus Data

def hapus_siswa(request, nomor_siswa):
     siswa = Siswa.objects.filter(id=nomor_siswa)
     siswa.delete()
     
     return redirect('siswa')
<a href="{% url 'hapus_siswa' siswa.id %}" class="btn btn-danger">Hapus</a>
path('siswa/hapus/<int:nomor_siswa>', hapus_siswa, name='hapus_siswa'),

9. Hapus Data + Confirm Page

Buat views untuk confirm.

def hapus_siswa_confirm(request, nomor_siswa):
     siswa = Siswa.objects.get(id=nomor_siswa)
     context = { 
        'siswa': siswa, 
     } 
     return render(request, 'hapus-siswa-confirm.html', context)

Buat halaman confirm.

{% extends "base.html" %}

{% block content %}
    <p>Apakah anda yakin ingin menghapus <strong>{{ siswa.nama_lengkap }}</strong>>?</p>
    <a href="{% url 'hapus_siswa' siswa.id %}" class="btn btn-danger">Ya</a>
    <a href="{% url 'siswa' %}" class="btn btn-info">Tidak</a>
{% endblock content %}

Rubah tujuan tombol hapus ke views confirm.

...
<a href="{% url 'hapus_siswa_confirm' siswa.id %}" class="btn btn-danger">Hapus
...

Tambahkan url.

...
path('siswa/hapus/confirm/<int:nomor_siswa>', hapus_siswa_confirm, name='hapus_siswa_confirm'),
...

Lanjutkan Membaca Materi Lengkap


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.