Django Admin Panelini Şahesere Dönüştürün: Jazzmin

Django'nun yerleşik admin paneli işlevsellik olarak kusursuz olsa da, görsel olarak günümüz standartlarının biraz gerisinde kalıyor. Neyse ki Django ekosistemi, paneli baştan aşağı yenileyen harika temalarla dolu.

Günümüzde en çok tercih edilen ve aktif olarak desteklenen Django admin temalarını, artı ve eksileriyle karşılaştırmalı olarak inceleyelim.

Hızlı Karşılaştırma Tablosu

Tema AdıAltyapı / Tasarım DiliAvantajlarıDezavantajlarıKimler İçin Uygun?
JazzminBootstrap 4 & AdminLTEÇok kolay kurulum, Canlı UI Builder, esnek.Tailwind gibi en yeni teknolojileri kullanmıyor.Hızlı, sorunsuz ve kurumsal bir panel isteyenler.
UnfoldTailwind CSSİnanılmaz şık ve modern, karanlık mod desteği mükemmel.Özelleştirmesi Jazzmin'e göre biraz daha teknik bilgi ister.Modern tasarım trendlerini yakalamak isteyenler.
GrappelliÖzel (Klasik)Çok stabil, yılların getirdiği güvenilirlik, eklenti desteği.Görünümü günümüzde artık biraz eski hissettiriyor.Tasarımdan ziyade stabilite ve köklü eklentiler arayanlar.
Material AdminGoogle Material DesignSaf Material Design deneyimi, şık formlar.Bazen diğer 3. parti Django paketleriyle (plugin) çakışabilir.Google servislerine benzer bir arayüz sevenler.

1. Django Jazzmin (Güvenilir ve Kurumsal)

Daha önceki mesajlarımızda detaylıca incelediğimiz Jazzmin, şu an piyasadaki en popüler seçeneklerden biri. AdminLTE altyapısını kullandığı için tam bir "yönetim paneli" hissiyatı verir.

  • Artıları: Hiç CSS/HTML bilmeden "Canlı UI Builder" ile tasarlanabilmesi en büyük artısıdır. Sekmeli formlar (tabs) ve FontAwesome ikon desteği harikadır.

  • Eksileri: Bootstrap 4 kullanıyor olması, en modern frameworkleri (Tailwind gibi) arayan frontend geliştiricilerine biraz eski moda gelebilir.

  • Özet: Müşteriye teslim edilecek projelerde "garanti" ve şık çözümdür.

2. Django Unfold (Yeni Nesil Yıldız)

Son zamanlarda Django topluluğunda fırtınalar estiren bir tema. Tamamen Tailwind CSS kullanılarak inşa edilmiştir. Minimalist, ferah ve Apple ekosistemine benzeyen çok modern bir tasarımı vardır.

  • Artıları: Görsel olarak muhtemelen en şık seçenektir. Gelişmiş filtreleme alanları, harika karanlık mod (dark mode) geçişleri ve özel widget destekleri sunar.

  • Eksileri: Ayarları Jazzmin kadar tak-çalıştır formunda değildir; Python sınıfları ve Tailwind class'ları ile biraz daha fazla haşır neşir olmanızı gerektirebilir.

  • Özet: Projenizin admin panelinin 2024-2026 trendlerine tam uyumlu görünmesini istiyorsanız kesinlikle Unfold seçmelisiniz.

3. Django Material Admin (Google Tarzı)

Eğer Android veya Google servislerinin kullandığı "Material Design" tasarım dilini seviyorsanız, bu paket tam size göre.

  • Artıları: Form giriş alanlarındaki animasyonlar, dalga (ripple) efektli butonlar ve temiz kart tasarımları çok estetiktir.

  • Eksileri: Bazen Django'nun kendi standart widget'larını değiştiren başka kütüphanelerle (örneğin gelişmiş metin editörleri - CKEditor vb.) uyum sorunu yaşatabilir.

  • Özet: Material UI tutkunları için idealdir.

4. Django Grappelli (Emektar Klasik)

Grappelli, Django'nun ilk popüler admin temalarından biridir. Sadece bir tema değil, aynı zamanda admin panelinin yeteneklerini artıran (örneğin otomatik tamamlama - autocomplete özellikleri) bir araç setidir.

  • Artıları: Çok oturmuş bir kütüphanedir. Mükemmel bir dokümantasyonu vardır ve çok stabildir.

  • Eksileri: Tasarımı, modern dashboard arayüzlerinden ziyade 2010'ların başındaki şık web sitelerini andırır. Mobil uyumluluğu Unfold veya Jazzmin kadar akıcı değildir.

  • Özet: Eski ve büyük projelerin vazgeçilmezidir, ancak sıfırdan başlanan yeni projelerde görsel sebeplerle pek tercih edilmemektedir.


(Not: Django Suit ve Django Jet gibi eskiden çok popüler olan temalar da vardır, ancak bunlar güncel Django sürümlerine ayak uydurmakta zorlandıkları veya bakımları durduğu için yeni projelerde kullanmanızı pek tavsiye etmem.)

Peki sen hangisini seçmelisin?

Eğer hızlı, kolay ve kurumsal bir çözüm arıyorsan Jazzmin ile devam etmeni öneririm. Ancak "Benim panelim en son teknoloji (Tailwind) ile yapılmış çok modern bir tasarıma sahip olsun, biraz daha kod yazmaya razıyım" dersen kesinlikle Unfold'u denemelisin.

Django'nun yerleşik admin paneli, arka planda veri yönetimi için inanılmaz derecede güçlüdür. Ancak günümüz standartlarında görsel olarak biraz demode kalabilir. Bir müşteriye veya ekibe proje teslim ederken, onlara şık ve modern bir kontrol paneli (dashboard) sunmak istersiniz. İşte tam bu noktada Django Jazzmin devreye giriyor.

Standart Django admin panelini AdminLTE 3 ve Bootstrap 4 tabanlı, tamamen özelleştirilebilir, modern bir arayüze nasıl dönüştüreceğimizi adım adım inceleyeceğiz.


1. Jazzmin Kurulumu

İlk adım olarak kütüphaneyi sanal ortamımıza (virtual environment) kurmamız gerekiyor.

Terminalinizi açın ve aşağıdaki komutu çalıştırın:

Bash
pip install django-jazzmin

Kurulum tamamlandıktan sonra, Django'ya bu yeni uygulamayı kullanmasını söylemeliyiz. settings.py dosyanızı açın ve INSTALLED_APPS listenizi güncelleyin.

Kritik Kural: jazzmin, Django'nun varsayılan admin panelinden (django.contrib.admin) kesinlikle önce yazılmalıdır. Aksi takdirde varsayılan tasarım ezilmeyecektir.

Python:
INSTALLED_APPS = [
    'jazzmin',  # Mutlaka en üstte olmalı!
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Kendi uygulamalarınız...
    'ogrenci_uygulamasi',
]

Bu işlemi yapıp sunucuyu (python manage.py runserver) başlattığınızda, admin panelinizin tasarımının anında modernleştiğini göreceksiniz.


2. Temel Arayüz Ayarları (JAZZMIN_SETTINGS)

Jazzmin'in asıl gücü özelleştirilebilir olmasında yatar. Bunun için settings.py dosyanızın en altına JAZZMIN_SETTINGS adında bir sözlük (dictionary) ekleyeceğiz.

Aşağıdaki yapılandırma, panelin metinlerini, logolarını ve genel davranışını değiştirir:

Python:
JAZZMIN_SETTINGS = {
    # Başlık ayarları
    "site_title": "Akademi Yönetim",
    "site_header": "Akademi Paneli",
    "site_brand": "Süper Akademi",
    
    # Logo ayarları (static klasörünüzün içindeki yola göre)
    # "site_logo": "img/logo.png", 
    "login_logo": None,
    
    # Giriş ekranı karşılama metni
    "welcome_sign": "Akademi Yönetim Sistemine Hoş Geldiniz",
    
    # Telif hakkı metni (En altta görünür)
    "copyright": "Akademi A.Ş",
    
    # Üst menüye hızlı linkler ekleme
    "topmenu_links": [
        {"name": "Ana Sayfa",  "url": "admin:index", "permissions": ["auth.view_user"]},
        {"name": "Siteyi Gör", "url": "/", "new_window": True},
        {"model": "auth.User"},
    ],
}

3. İkonlar ve Menü Yönetimi

Standart Django panelinde menü öğeleri yanında ikon barındırmaz. Jazzmin, FontAwesome 5 kütüphanesini içinde barındırır. Modellerinize ikon atayarak görsel hiyerarşiyi inanılmaz derecede artırabilirsiniz.

Bunun için yine JAZZMIN_SETTINGS sözlüğünün içine icons anahtarını ekliyoruz:

Python:
JAZZMIN_SETTINGS = {
    # ... (Önceki ayarlarınız) ...

    # Modeller için FontAwesome ikonları
    "icons": {
        "auth.User": "fas fa-users",
        "auth.Group": "fas fa-users-cog",
        "ogrenci_uygulamasi.Ogrenci": "fas fa-user-graduate",
        "ogrenci_uygulamasi.Ders": "fas fa-book",
    },
    
    # İkonu olmayan modeller için varsayılan ikon
    "default_icon_parents": "fas fa-chevron-circle-right",
    "default_icon_children": "fas fa-circle",
}

FontAwesome sitesinden (v5 için) istediğiniz ikonun class adını (örn: fas fa-laptop) bularak buraya yazabilirsiniz.


4. Tema ve Görünüm Değiştirme (JAZZMIN_UI_TWEAKS)

Eğer mevcut renk şemasını beğenmediyseniz, Jazzmin Bootswatch temalarını doğrudan destekler. İsterseniz tek satır kodla tam karanlık moda (Dark Mode) geçebilirsiniz.

Bunun için settings.py dosyanıza JAZZMIN_UI_TWEAKS adlı yeni bir sözlük eklemeniz gerekir:

Python:
JAZZMIN_UI_TWEAKS = {
    "navbar": "navbar-dark",          # Üst menü karanlık
    "theme": "darkly",                # Bootswatch teması (örn: darkly, flatly, cosmo)
    "sidebar": "sidebar-dark-primary", # Sol menü karanlık ve ana renk seçimi
    "sidebar_nav_child_indent": True,  # Alt menüleri hafif sağa kaydırır
    "button_classes": {
        "primary": "btn-primary",
        "secondary": "btn-secondary",
        "info": "btn-info",
        "warning": "btn-warning",
        "danger": "btn-danger",
        "success": "btn-success"
    }
}

Popüler Tema Önerileri:

  • darkly: Şık ve göz yormayan bir karanlık mod.

  • flatly: Düz, modern ve kurumsal renkler (açık tema).

  • pulse: Canlı ve enerjik bir açık tema.


Özet

Bu adımları tamamladığınızda;

  1. Mobil uyumlu (responsive),

  2. FontAwesome ikonlarıyla zenginleştirilmiş,

  3. Kendi markanıza göre logolanmış ve renklendirilmiş profesyonel bir admin paneline sahip olacaksınız.

Harika! Bir projede admin panelini uygulamalara veya modellere göre özelleştirmek, kullanıcı deneyimini bir üst seviyeye taşır. Jazzmin, standart Django'nun ötesine geçerek formları düzenleme, menüleri gruplama ve modelleri gizleme gibi harika yetenekler sunar.

İşte uygulamalarına ve modellerine özel yapabileceğin en etkili özelleştirmeler:

1. Menü Sıralamasını Değiştirme ve Gizleme

Bazen bazı modellerin veya uygulamaların sol menüde görünmesini istemeyebilirsin (örneğin, sadece arka planda çalışan ayar modelleri). Ayrıca, en önemli uygulamanın en üstte olmasını isteyebilirsin.

settings.py içindeki JAZZMIN_SETTINGS sözlüğüne şu ayarları ekleyebilirsin:

Python
JAZZMIN_SETTINGS = {
    # İstemediğin uygulamaları tamamen gizler (örneğin Django'nun auth uygulamasını gizlemek)
    "hide_apps": ["auth"],

    # Sadece belirli bir modeli gizler
    "hide_models": ["ogrenci_uygulamasi.EskiKayitlar"],

    # Sol menüdeki uygulamaların sıralamasını belirler
    "order_with_respect_to": ["ogrenci_uygulamasi", "auth", "diger_uygulama"],
}

2. Uygulama Menüsüne Özel Link (Buton) Ekleme

Diyelim ki ogrenci_uygulamasi menüsünün altına, veritabanı tablosu olmayan ama özel bir iş yapan bir link eklemek istiyorsun (örneğin "Excel Çıktısı Al" veya "Raporlar" sayfası).

Bunu custom_links ile yapabilirsin:

Python
JAZZMIN_SETTINGS = {
    "custom_links": {
        "ogrenci_uygulamasi": [{
            "name": "Öğrenci Raporu Al", 
            "url": "/admin/rapor-al/", # Gideceği URL
            "icon": "fas fa-file-excel", # Özel ikon
            "permissions": ["ogrenci_uygulamasi.view_ogrenci"] # Sadece yetkisi olan görsün
        }]
    }
}

3. Kayıt Ekleme/Düzenleme (Change Form) Ekranını Güzelleştirme

Öğrenci ekleme ekranına girdiğinde tüm alanların alt alta yığılması yerine, onları sekmelere (tabs) veya açılır-kapanır panellere (accordion) bölebilirsin. Bu, Jazzmin'in en sevilen özelliklerinden biridir.

Önce standart Django admin.py dosyanı kullanarak alanları gruplandır:

Python
# admin.py dosyanda
@admin.register(Ogrenci)
class OgrenciAdmin(admin.ModelAdmin):
    # Formu gruplara ayırıyoruz
    fieldsets = (
        ('Kişisel Bilgiler', {
            'fields': ('ad', 'soyad', 'numara'),
        }),
        ('Okul Durumu', {
            'fields': ('kayit_tarihi', 'mezun_mu'),
            'description': 'Öğrencinin güncel akademik durumu.',
        }),
    )

Sonra Jazzmin'e bu grupları nasıl göstereceğini settings.py içinden söyle:

Python
JAZZMIN_SETTINGS = {
    # Tüm formlar için varsayılan görünüm (single, horizontal_tabs, carousel, collapsible)
    "changeform_format": "horizontal_tabs",

    # Eğer sadece belirli modellere özel bir görünüm istersen:
    "changeform_format_overrides": {
        "auth.user": "collapsible", # Kullanıcı modeli açılır-kapanır olsun
        "ogrenci_uygulamasi.ogrenci": "horizontal_tabs", # Öğrenci modeli yatay sekmeli olsun
    },
}

horizontal_tabs seçtiğinde, fieldsets içinde tanımladığın "Kişisel Bilgiler" ve "Okul Durumu" başlıkları yan yana tıklanabilir şık sekmelere dönüşür.


Gizli Silah: Canlı UI Builder (Tasarım Oluşturucu)

Sana kod yazmadan tema tasarlamanı sağlayacak harika bir ipucu vereyim. JAZZMIN_SETTINGS içine şu satırı ekle:

Python
JAZZMIN_SETTINGS = {
    "show_ui_builder": True,
}

Bunu ekleyip admin paneline girdiğinde, sağ üst köşede bir ayar ikonu belirecek. Oraya tıklayarak tüm renkleri, menü stillerini ve temaları canlı olarak tıklayarak değiştirebilirsin. İstediğin tasarımı bulduğunda, sana ekrana kopyalaman için bir kod bloğu verir. O bloğu kopyalayıp JAZZMIN_UI_TWEAKS içine yapıştırırsın ve kalıcı olur. İşin bitince show_ui_builder: False yapmayı unutma.

Canlı UI Builder (Arayüz Oluşturucu), Django Jazzmin'in en eğlenceli ve hayat kurtaran özelliklerinden biridir. Renk kodlarıyla veya CSS sınıflarıyla tek tek uğraşmak yerine, her şeyi görerek ve tıklayarak ayarlamanı sağlar.

İşte bu aracı kullanarak admin panelini adım adım nasıl tasarlayacağın:

1. UI Builder'ı Aktif Etme

İlk olarak, sistemde bu aracı görünür hale getirmemiz gerekiyor. settings.py dosyanı aç ve JAZZMIN_SETTINGS sözlüğünün içine şu ayarı ekle:

Python
JAZZMIN_SETTINGS = {
    # Diğer ayarların burada duruyor...
    
    "show_ui_builder": True, # Bu satırı ekle
}

2. Admin Panelinde Aracı Açma

Django sunucunu çalıştır (python manage.py runserver) ve admin paneline giriş yap.

Sağ üst köşede, profil isminin veya çıkış butonunun hemen oralarda yeni bir "UI Builder" (veya bir ayar çarkı) ikonu belirdiğini göreceksin. Buna tıkla.

3. Tasarımı Canlı Olarak Özelleştirme

Tıkladığında ekranın sağ tarafından bir panel açılacak. Bu panelde değişiklik yaptığın an, arka planda admin panelinin tasarımı anında değişecektir. Neleri değiştirebilirsin?

  • Tema (Theme): "Darkly", "Cosmo", "Flatly" gibi onlarca Bootswatch teması arasında geçiş yapabilirsin. Açık veya koyu mod tercihini buradan belirleyebilirsin.

  • Üst Menü (Navbar): Üst kısmın arka plan rengini ve yazı rengi stilini (açık/koyu) seçebilirsin.

  • Sol Menü (Sidebar): Yan menünün rengini, hover (üzerine gelince) efektlerini ve alt menülerin içeri girintili (indented) olup olmayacağını ayarlayabilirsin.

  • Marka/Logo Alanı (Brand Logo): Sol üstteki başlık kısmının arka plan rengini değiştirebilirsin.

4. Tasarımı Kalıcı Hale Getirme (En Önemli Adım)

Buraya çok dikkat etmen gerekiyor: UI Builder'da yaptığın değişiklikler otomatik olarak kaydedilmez. Sayfayı yenilersen her şey eski haline döner. Bu araç sadece "kod üretici" bir önizleme aracıdır.

Tasarımını bitirdiğinde şu adımları izlemelisin:

  1. Açılan UI Builder panelinin en alt kısmına in.

  2. Orada "JAZZMIN_UI_TWEAKS = { ... }" şeklinde başlayan bir kod bloğu göreceksin.

  3. O kod bloğunun tamamını kopyala.

  4. settings.py dosyana geri dön ve kopyaladığın bu bloğu dosyanın en altına (JAZZMIN_SETTINGS'in dışına) yapıştır.

Şuna benzer bir görüntü olacak:

Python
# settings.py dosyanın en altı

JAZZMIN_UI_TWEAKS = {
    "navbar_small_text": False,
    "footer_small_text": False,
    "body_small_text": False,
    "brand_small_text": False,
    "brand_colour": "navbar-dark",
    "accent": "accent-primary",
    "navbar": "navbar-dark",
    "no_navbar_border": False,
    "navbar_fixed": True,
    "layout_boxed": False,
    "footer_fixed": False,
    "sidebar_fixed": True,
    "sidebar": "sidebar-dark-primary",
    "sidebar_nav_small_text": False,
    "sidebar_disable_expand": False,
    "sidebar_nav_child_indent": True,
    "sidebar_nav_compact_style": False,
    "sidebar_nav_legacy_style": False,
    "sidebar_nav_flat_style": False,
    "theme": "darkly", # Seçtiğin tema buraya geldi
    "dark_mode_theme": None,
    "button_classes": {
        "primary": "btn-primary",
        "secondary": "btn-secondary",
        "info": "btn-info",
        "warning": "btn-warning",
        "danger": "btn-danger",
        "success": "btn-success"
    }
}

5. UI Builder'ı Kapatma (Güvenlik ve Temizlik)

Kodunu settings.py dosyasına yapıştırıp kaydettikten sonra, admin paneline giren diğer kullanıcıların (veya müşterinin) bu ayarları kurcalamasını istemezsin.

Son adım olarak settings.py dosyandaki show_ui_builder ayarını False yap (veya o satırı tamamen sil):

Python
JAZZMIN_SETTINGS = {
    "show_ui_builder": False, # Tasarım bitince aracı kapat
}

Hiç CSS yazmadan, tamamen sana özgü modern bir admin paneli tasarladın ve bunu kalıcı hale getirdin.

Harika bir seçim! Uzun ve aşağı doğru bitmek bilmeyen veri giriş formları, kullanıcıları her zaman yorar. Formları sekmelere (tabs) bölmek, admin panelini gerçek bir profesyonel masaüstü yazılımı gibi hissettirir.

Jazzmin ile form sekmeleri oluşturmak iki aşamalı bir işlemdir: Önce Django'ya alanları nasıl gruplayacağını söyleriz, sonra Jazzmin'e bu grupları sekme olarak göstermesini emrederiz.

İşte adım adım yapılışı:

1. Adım: Django admin.py İçinde Gruplama Yapmak

İlk olarak, standart Django'nun fieldsets özelliğini kullanarak modelimizdeki alanları mantıksal gruplara ayırmalıyız. Ogrenci modelimiz üzerinden gidelim:

admin.py dosyanı aç ve OgrenciAdmin sınıfını şu şekilde düzenle:

Python
from django.contrib import admin
from .models import Ogrenci

@admin.register(Ogrenci)
class OgrenciAdmin(admin.ModelAdmin):
    # list_display, search_fields vs. burada durmaya devam edebilir...
    list_display = ('numara', 'ad', 'soyad', 'kayit_tarihi', 'mezun_mu')
    
    # Form alanlarını gruplara ayırıyoruz
    fieldsets = (
        ('Kişisel Bilgiler', {
            'fields': ('ad', 'soyad'),
            'description': 'Öğrencinin temel kimlik bilgileri.', # İsteğe bağlı açıklama
        }),
        ('Akademik Durum', {
            'fields': ('numara', 'kayit_tarihi', 'mezun_mu'),
        }),
        ('İletişim & Diğer', {
            'fields': ('email', 'telefon'), # Eğer modelinde bu alanlar varsa ekleyebilirsin
            'classes': ('collapse',), # İstersen bu kısmı varsayılan olarak kapalı (akordiyon) yapabilirsin
        }),
    )

Önemli Not: fieldsets kullandığında, modeldeki tüm zorunlu alanları bu grupların içine dahil ettiğinden emin olmalısın. Aksi takdirde kayıt eklerken hata alırsın.

2. Adım: Jazzmin'e Sekme Görünümünü Söylemek

Gruplamayı yaptık. Normalde Django bunları sayfada alt alta kutular şeklinde gösterir. Şimdi settings.py dosyamıza gidip Jazzmin'e bu kutuları sekme (tab) yapmasını söyleyeceğiz.

settings.py dosyanı aç ve JAZZMIN_SETTINGS sözlüğüne şu ayarları ekle:

Python
JAZZMIN_SETTINGS = {
    # Diğer ayarların burada duruyor...

    # Tüm modellerdeki fieldsets'leri varsayılan olarak yatay sekme yapar:
    "changeform_format": "horizontal_tabs",

    # Alternatif Görünümler (İstersen bunları da deneyebilirsin):
    # "changeform_format": "vertical_tabs", # Sekmeler solda alt alta durur
    # "changeform_format": "collapsible",   # Akordiyon gibi açılıp kapanan kutular
    # "changeform_format": "carousel",      # İleri/geri butonlarıyla geçiş yapılan slayt görünümü

    # Eğer bunu sadece ÖĞRENCİ modeline özel yapmak istersen (diğerleri normal kalsın dersen):
    "changeform_format_overrides": {
        "ogrenci_uygulamasi.ogrenci": "horizontal_tabs", 
    },
}

[Not: "ogrenci_uygulamasi" kısmını kendi uygulamanın (app) gerçek adıyla değiştirmeyi unutma.]

Sonuç

Artık admin panelinden "Yeni Öğrenci Ekle" veya mevcut bir öğrenciyi "Düzenle" ekranına girdiğinde, ekranın üst kısmında "Kişisel Bilgiler", "Akademik Durum" ve "İletişim & Diğer" adında şık sekmeler göreceksin. Alanlar arasında tıklayarak geçiş yapabilirsin.

Inline (içe içe) modeller, Django admin panelinin tartışmasız en çok zaman kazandıran ve en güçlü özelliklerinden biridir. Bu sayede, örneğin bir öğrenciyi düzenlerken sayfadan hiç ayrılmadan o öğrenciye ait ders notlarını, devamsızlık kayıtlarını veya aldığı kitapları ekleyebilirsin.

Jazzmin, bu inline modelleri daha önce ayarladığımız sekmeli (tab) yapıya otomatik olarak uyarlar ve onlar için yeni bir sekme oluşturur.

Bunu nasıl yapacağımızı adım adım görelim:

1. Adım: Örnek Bir İlişkili Model (ForeignKey)

Öncelikle Ogrenci modeline bağlı bir alt modelimiz olması gerekiyor. Örneğin, models.py dosyasında bir Not (Öğrencinin aldığı notlar) modeli olduğunu varsayalım:

Python
# models.py
from django.db import models

class Ogrenci(models.Model):
    # ... senin öğrenci alanların (ad, soyad, numara vs.)
    pass

class Not(models.Model):
    ogrenci = models.ForeignKey(Ogrenci, on_delete=models.CASCADE) # Öğrenciye bağladık
    ders_adi = models.CharField(max_length=100)
    puan = models.IntegerField()

2. Adım: Inline Sınıfını Oluşturmak

Şimdi admin.py dosyasına gidiyoruz. Öğrenci sayfasına gömmek istediğimiz bu Not modeli için bir "Inline" sınıfı oluşturacağız. Django'da iki tür inline vardır:

  • TabularInline: Verileri yan yana (Excel tablosu gibi) sıkıştırarak gösterir. (Genellikle en çok tercih edilen budur).

  • StackedInline: Verileri alt alta, klasik bir form gibi gösterir.

Biz TabularInline kullanalım:

Python
# admin.py
from django.contrib import admin
from .models import Ogrenci, Not

# 1. Inline Sınıfını Tanımlıyoruz (OgrenciAdmin'in üstüne yazın)
class NotInline(admin.TabularInline):
    model = Not
    extra = 1  # Sayfa açıldığında varsayılan olarak kaç tane boş satır gelsin
    # fields = ('ders_adi', 'puan') # Sadece bu alanların görünmesini istersen

3. Adım: Inline'ı Ana Modele (Öğrenciye) Bağlamak

Son olarak, oluşturduğumuz bu NotInline sınıfını OgrenciAdmin içine ekliyoruz.

Python
# admin.py devamı...

@admin.register(Ogrenci)
class OgrenciAdmin(admin.ModelAdmin):
    # Önceki ayarlarımız duruyor...
    list_display = ('numara', 'ad', 'soyad')
    fieldsets = (
        ('Kişisel Bilgiler', {'fields': ('ad', 'soyad')}),
        ('Akademik Durum', {'fields': ('numara', 'kayit_tarihi', 'mezun_mu')}),
    )
    
    # 2. Inline'ı buraya ekliyoruz!
    inlines = [NotInline] 

Sonuç ve Jazzmin'in Sihri

Bu işlemi yapıp admin paneline gidip bir öğrenciyi düzenlemeye başladığında şunu göreceksin:

Daha önce oluşturduğumuz "Kişisel Bilgiler" ve "Akademik Durum" sekmelerinin hemen yanına "Notlar" adında yepyeni bir sekme daha eklendi! O sekmeye tıkladığında, başka hiçbir sayfaya gitmeden direkt oradan öğrenciye ait dersleri ve puanlarını Excel gibi hızlıca doldurup tek seferde kaydedebileceksin.



Yorumlar

Bu blogdaki popüler yayınlar

Pardus Üzerine Django Kurulumu

Python ile Web Geliştirme: Django App Oluşturma