Custom Filter Query di Django Admin
Selain filter standar, django juga memberi kita kebebasan untuk membuat custom filter. Meski begitu, satu hal yang perlu diingat adalah fungsi query yang kita jalankan harus berbentuk object queryset. Dalam contoh ini, saya ingin mengetahui berapa panjang karakter dari field quote_text yang ada di model Quote.
Berikut ini model Quote saya:
Solusi di admin.py, kita menggunakan Length, sebuah class bawaan django database function.
Woah, simple and nice...
Reference:
Berikut ini model Quote saya:
class Quote(models.Model):
quote_text = models.TextField()
Solusi di admin.py, kita menggunakan Length, sebuah class bawaan django database function.
from django.db.models.functions import Length
class QuoteLengthFilter(admin.SimpleListFilter):
title = 'Quote Length'
parameter_name = 'quotelength'
def lookups(self, request, modeladmin):
return (('50', '50'), ('50_100', 'Between 50 and 100'),)
def queryset(self, request, queryset):
if self.value == '50':
return queryset.annotate(len=Length('quote_text')).filter(len__lt=50)
if self.value == '50_100':
return queryset.annotate(len=Length('quote_text')).filter(len__range=(50, 100))
Woah, simple and nice...
Reference:
[…] Custom Filter Query di django-admin […]
ReplyDelete