Inline Into Inline or Nested Django Admin

Memang
yang namanya menggunakan framework orang lain harus pintar pintar
mendapatkan jalan pintas apabila pada pelaksanaan menemukan variasi yang
aneh aneh. Bertahap saya coba jelaskan yang dimaksud agar hasilnya
seperti pada gambar dibawah ini :
Coba
kalian perhatikan didalam sebuah TABULASI ada 1 primary inline dengan
nama Contact, dan contact mempunyai inline bernama phone, email, dan
idcard.
Yang
menjadi permasalahan adalah saya mengguakan Tabulasi dan jika tanpa
tambahan plugin custom inline pemberian inline tidak akan tampil.
Struktur Modelnya seperti ini guys jika kalian masih bingung :
  • Account 
    • Contact Info (Tab Ke-1)
    • Contact Person (Tab Ke-2)
      • Contact (Modul Contact inline terhadap account)
        • Phone (inline terhadap inline contact yang terinline account)
        • Email (inline terhadap inline contact yang terinline account)
        • Id Card (inline terhadap inline contact yang terinline account)
    • Profil (Tab Ke-3)

Saya menggunakan SuperInlineModelAdmin berhasil membuat skema modul data seperti di atas.

Tetapi untuk yang TIDAK MENGGUNAKAN TABULASI BERINLINE tidak ada masalah seperti pada gambar di bawah ini :
  • Contact
    • Contact Info (Tab Ke-1 = Modul)
      • Phone
      • Email
      • IdCard

Oke membuat inline into inline didalam sebuah tabulasi. Pertama install superInlineAdmin dengan cara :

  • pip install django-super-inlines
  • Add ‘super_inlines’, to INSTALLED_APPS before ‘django.contrib.admin’,

Sekarang masuk kedalam admin.py kalian dan tambahkan baris dibawah ini :

from django.contrib.admin import TabularInline, StackedInline, site
from super_inlines.admin import SuperInlineModelAdmin, SuperModelAdmin

Sekarang coba perhatikan logika contoh dibawah ini :
class RoomInlineAdmin(SuperInlineModelAdmin, TabularInline):
    model = Room

class HouseInlineAdmin(SuperInlineModelAdmin, StackedInline):
    model = House
    inlines = (RoomInlineAdmin,)

class OwnerAdmin(SuperModelAdmin):
    inlines = (HouseInlineAdmin,)

site.register(Owner, OwnerAdmin)

Keterangan logika :
  • OwnerAdmin = Induknya, dalam contoh diatas punya saya adalah Account
  • HouseInlineAdmin = Owner mempunya rumah yang didalam rumah ada beberapa kamar, dalam contoh saya diatas adalah Contact
  • RoomInlineAdmin = Inline dari Inline House, artinya beberapa rumah
    ada di beberapa kamar, dalam contoh saya diatas adalah phone, email dan
    idcard.

Bagaimana sudah paham ?? lalu bagaimana jika di owneradmin nya
menggunakan plugin tabbed seperti punya saya, rubah seperti dibawah ini :

class OwnerAdmin(SuperModelAdmin, TabbedModelAdmin):

Bagaimana masih bingung ? jika pluginnya lebih dari 2, saya kebetulan punya 3 plugin, yan tinggal tambahkan saja :

class OwnerAdmin(SuperModelAdmin, VersionAdmin, TabbedModelAdmin):

Contoh diatas saya menggunakan plugin VersionAdmin dan TabbedModelAdmin.
Semoga bermanfaat.

Leave a Reply

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