25 Eylül 2008 Perşembe

Django ile Anket 2

Kaldığımız yerden devam edelim. Şimdi admin panelini kullanarak iki anket ekleyin.
Ben anket sorusu olarak "Hangi editörü kullanıyorsunuz ? " ve "Günde kaç saat bilgisayar başındasınız ?"'ı ekledim.
Ardından anasayfadan Anket bölümüne tekrar geldiğinizde eklediğimiz anketlerin listelendiğini göreceksiniz.

Sanırım hepiniz tuhaf giden birşeyler olduğunu fark etmişsinizdir. Tüm anketler "Anket object" ismiyle yani ne olduğunu anlayamadığımız bir isimle listelenmekte. Gelin bunu rahat anlaşılabilir bir hale nasıl sokabiliriz onu inceleyelim.

Bunun için models.py dosyamızdaki sınıflarımızın altına şu satırları ekliyoruz.

def __unicode__(self):
return self.soru


Bunu anket sınıfının altına ekliyoruz. Burada verdiğimiz self.soru veritabanında ki kaydımızın ismi.


def __unicode__(self):
return self.secim

Bunu da Secim sınıfına ekliyoruz.

Şimdi admin panelini güncelleyip nasıl göründüğüne bir bakalım. Sanırım bu hali daha açıklayıcı olmuştur ;)

Şimdi de alanların yerlerini değiştirelim. Şu anda bir anket eklerken ilk sırada soru 2. sırada da yayin tarihi bulunuyor. Şimdi bunların yerlerini değiştirelim. Anket dizini içerisindeki admin.py dosyasında admin.site.register() yerine aşağıdaki satırları ekleyin.

class AnketAdmin(admin.ModelAdmin):
fields = ['yayin_tarihi','soru']

admin.site.register(Anket,AnketAdmin)

Değiştirdikte ne oldu yani şimdi ? dediğinizi duyar gibi oluyorum :) Anket uygulaması gibi 2 alandan oluşan bir uygulamada pek bir işe yaramaz ama alan sayısı arttıkça sıralamanın istediğini gibi olmasını isteyebilirsiniz. Ya da sık kullanılmayan bazı alanları gizlemek ya da benzer kategorileri gruplandırmak. Şimdi bunlara da birer örnek verelim. İhtiyacınız olduğunda bu da varmış diye aklınızda bulunsun ;) Yine admin.py dosyasında ki AnketAdmin clasını değiştiriyoruz.

class AnketAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['soru']}),
('Tarih Bilgileri', {'fields': ['yayin_tarihi']}),
]

Bu değişiklikle Yayin Tarihi bilgileri ayrı bir bölümde Tarih Bilgileri başlığıyla gösterilecek. Tarayıcımıza gidip hemen bir kontrol edelim.

Ardından da ufak bir değişiklik daha yapalım.

class AnketAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['soru']}),
('Tarih Bilgileri', {'fields': ['yayin_tarihi'],'classes': ['collapse']}),
]


Neyse bu kadar ince ayar yeter. Biz anketimize geri dönelim. Anketi hazırladık fakat sorular yok. Hemen sorularıda admin paneline tanıtalım. Bunun nasıl yapıldığını daha önce görmüştük. admin.py dosyasını açıyoruz tekrar.

admin.site.register(Secim)

Satırını ekliyoruz.

Ardından Secimleri seçip bir kaç seçenek ekleyelim ki anketimiz şenlensin ;)
Yeni seçenek eklerken yukarıdan hangi ankete ekleyeceğimiz seçiyoruz. Fakat önce soruyu ekle sonra seçenekleri ekle falan bana pek kullanışlı gelmiyor. Eğer sizde benim gibi düşünüyorsanız birde şunu deneyin.

Az önce eklediğimiz satırı kaldırıp AnketAdmin sınıfının sonuna inlines = [Secimler] i ekliyoruz. Yani dosyamızın son hali şuna benzeyecek.

from OrnekProje.anket.models import Anket
from OrnekProje.anket.models import Secim
from django.contrib import admin


class Secimler(admin.StackedInline):
model = Secim
extra = 4

class AnketAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['soru']}),
('Tarih Bilgileri', {'fields': ['yayin_tarihi'],'classes': ['collapse']}),
]
inlines = [Secimler]

admin.site.register(Anket,AnketAdmin)

Yeniden bir kayıt girmeyi deneyin ya da girdiğiniz kayıtları düzenleyin.
Birde Secimler(admin.StackedInline) yerine admin.TabularInline şeklinde kaydedip deneyin. Hangisi daha hoş ?

Ekleme bölümünü baya bir kurcaladık. Sıra geldi değişiklik bölümüne, Anketler-Değiştire geldiğinizde sadece anketin ismini görebiliyorsunuz. Şimdi biraz daha ayrıntı ekleyelim. inlines seçeneğinde yaptığımız gibi bir değişiklik yapacağız. admin.py dosyasında AnketAdmin sınıfı altına şu satırı ekleyelim.

list_display = ('soru','yayin_tarihi')

Şimdi sayfamızı yenileyelim. Ardından az önceki örnekte olduğu gibi aşağıdaki satırlarıda tek tek(!) ekleyerek her birinin neler yaptığını anlamaya çalışın.

list_filter = ['yayin_tarihi']
search_fields= ['soru']
date_hierarchy = 'yayin_tarihi'

Hiç yorum yok:

Yorum Gönder