Django İlk Uygulamamızı Yazıyoruz – 3

Geçen yazımızda modellerimizi oluşturup Django ile mikroblogumuzu yapmıştık. Bir adet yazı eklemiştik ve başarılı şekilde çalıştırmıştık. Şimdi ise Django’nun gelişmiş yönetim panelinden bahsetmek istiyorum. Bu yönetim paneline istediğimiz şekilde müdahale edebiliriz. Genelde yaptığımız uygulamalar için bir dosya oluşturup o dosyadan müdahale ediyoruz. Şöyle de denilebilir bir çeşit hook sistemi var. Yazdığımz uygulamaya göre şekilleniyor. Bu şekillendirmeleri uygulamanın dizininde admin.py adında bir dosya oluşturarak yapabiliyoruz.

Dosyayı oluşturduğumuzda aşağıdakileri yazıyoruz.

from django.contrib import admin
from .models import Mikro

class MikroAdmin(admin.ModelAdmin):
    date_hierarchy = 'yayinlanma_tarihi'
    fields = ('yayinlanmis','baslik','slug','icerik','yazar')
    list_display = ('baslik','yayinlanma_tarihi','yayinlanmis')
    list_display_links = ['baslik']
    list_filter = ['yayinlanmis','guncelleme_tarihi','yazar']

    prepopulated_fields = { 'slug' : ('baslik',) } 
    search_fields = ['baslik','icerik']

admin.site.register(Mikro, MikroAdmin)

Mikro modelini, MikroAdmin sınıfıyla yönetici paneline kayıt etmiş bulunduk. “list_display”e baktığımızda yazıların listeleneceği bölümde yayınlanma durumunu, tarihini ve başlığını göstereceğini belirttik. Bir de arama bölümü oluşturduk ki başlığa ve içeriğe göre arama yapabiliyor. Birkaç tane de filter oluşturduk. Bunlar yayınlanan yazılar, güncelleme tarihi en yüksek olan yazılar ve yazar ismine göre. Şimdi sunucunuzu çalıştırın ve yönetim paneline girin. Mikros seçeneğine tıklayın.

Gördüğünüz üzere bazı yerle Türkçeleştirme gerektiriyor. models.py dosyanızı açın ve burada Mikro modeline şunları ekleyin.

def yayinlanmis_admin(self):
        if self.yayinlanmis:
            return True
        else:
            return False

    def baslik_admin(self):
        return self.baslik

    def yayinlanma_admin(self):
        return self.yayinlanma_tarihi

    # Admin paneli için tasarım özelleştirmeleri

    yayinlanmis_admin.admin_order_field = 'yayinlanmis'
    yayinlanmis_admin.short_description = 'Yayınlanmış'
    yayinlanmis_admin.boolean = True

    baslik_admin.admin_order_field = 'baslik'
    baslik_admin.short_description = 'Yazı Başlığı'

    yayinlanma_admin.admin_order_field = 'yayinlanma_tarihi'
    yayinlanma_admin.short_description = 'Yayınlanma Tarihi'

Ekledikten sonra models.py dosyanız şu şekilde olmalıdır.

#-*- coding:utf-8 -*-
from django.db import models

# Create your models here.

from django.contrib.auth.models import User
from django.template.defaultfilters import slugify

class MikroManager(models.Manager):
    def live(self):
        return self.model.objects.filter(yayinlanmis=True)

class Mikro(models.Model):
    yayinlanma_tarihi = models.DateTimeField(auto_now_add=True, editable=False)
    guncelleme_tarihi = models.DateTimeField(auto_now=True, editable=False)
    baslik = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, blank=True, default='')
    icerik = models.TextField()

    yayinlanmis = models.BooleanField(default=True)
    yazar = models.ForeignKey(User, related_name='yazilar')
    objects = MikroManager()

    class Meta:
        ordering = ['-yayinlanma_tarihi','baslik']

    def __unicode__(self):
        return self.baslik

    def yayinlanmis_admin(self):
        if self.yayinlanmis:
            return True
        else:
            return False

    def baslik_admin(self):
        return self.baslik

    def yayinlanma_admin(self):
        return self.yayinlanma_tarihi

    # Admin paneli için tasarım özelleştirmeleri

    yayinlanmis_admin.admin_order_field = 'yayinlanmis'
    yayinlanmis_admin.short_description = 'Yayınlanmış'
    yayinlanmis_admin.boolean = True

    baslik_admin.admin_order_field = 'baslik'
    baslik_admin.short_description = 'Yazı Başlığı'

    yayinlanma_admin.admin_order_field = 'yayinlanma_tarihi'
    yayinlanma_admin.short_description = 'Yayınlanma Tarihi'

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.baslik)
        super(Mikro, self).save(*args, **kwargs)

    @models.permalink
    def get_absolute_url(self):
        return ('mikro:detail',(),{'slug':self.slug})

Burası tamam olduğuna göre admin.py dosyasını yeniden düzenlememiz gerekiyor. Aşağıdaki kodları dosyaya aynen yapıştırırsanız sorun yaşamazsınız.

from django.contrib import admin
from .models import Mikro

class MikroAdmin(admin.ModelAdmin):
    date_hierarchy = 'yayinlanma_tarihi'
    fields = ('yayinlanmis','baslik','slug','icerik','yazar')
    list_display = ('baslik_admin','yayinlanma_admin','yayinlanmis_admin')
    list_display_links = ['baslik_admin']
    list_filter = ['yayinlanmis','guncelleme_tarihi','yazar']

    prepopulated_fields = { 'slug' : ('baslik',) } 
    search_fields = ['baslik_admin','icerik']

admin.site.register(Mikro, MikroAdmin)

Bu da tamam olduğuna göre yönetim panelini tekrar açabiliriz. Şimdiki görüntü şuna benzer olacaktır.

Ama o da ne? Nesnelerimiz “mikro” olarak geçiyor. Hatta aşağıda da “2 mikros” yazıyor :) Bunu düzeltmek için models.py dosyamızı açıp, Mikro sınıfının içerisinde bir alt sınıf olan Meta’da düzenleme yapmamız gerekiyor.

    class Meta:
        ordering = ['-yayinlanma_tarihi','baslik']
        verbose_name = 'Mikro Blog'
        verbose_name_plural = 'Mikro Blog'

verbose_name ve verbose_name_plural ile bu sorunun üstesinden gelebiliriz.

Şu anlık bu kadar! Yazılarınızı düzenleyebilirsiniz ve yeni yazılar ekleyebilirsiniz. Filtrelerden geçirebilirsiniz. Diğer yazımızda yan menüdeki filtre isimlerinin değiştirilmesinden ve yazı düzenleme kısmının düzenlenmesinden bahsedeceğiz.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir