fatiherikli

Django'nun admin panelinde default gelen filter'lar dışında kendimiz de filter tanımlayabilmekteyiz. Bunun için django.contrib.admin.filterspecs modulündeki Class'ları kullanabiliriz. Base class olarak FilterSpec kullanılmakta. Daha sonra ayrı field tipleri için bu class'tan extend edilmiş classlar yazılmıştır. BooleanFieldFilterSpec gibi.

Biz BooleanFieldFilterSpec class'ını kendimize göre değiştirelim. Bu class evet/hayir filtre seçimini sağlamaktadır.

from django.contrib.admin.filterspecs import BooleanFieldFilterSpec, FilterSpec

class YeniSiparisFilterSpec(BooleanFieldFilterSpec):

def choices(self, cl):

for k, v in (('Hepsi', None), ('Hayir', '1'), ('Evet', '0')):

yield {'selected': self.lookup_val == v and not self.lookup_val2,

'query_string': cl.get_query_string({self.lookup_kwarg: v},[self.lookup_kwarg2]),

'display': k}

Bu filter'ı kullanabilmek için birkaç adım izlememiz gerekmekte. Öncelikle model tanımlarında;

class Siparis(models.Model):

okundu = models.BooleanField()

okundu.custom_filter_spec = True

Daha sonra ise admin.py dosyasında;

FilterSpec.filter_specs.insert(0, (lambda f: bool(hasattr(f, 'custom_filter_spec')), YeniSiparisFilterSpec))

şeklinde register edebiliriz.

comments powered by Disqus