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:
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:

  1. django database functions

  2. stackoverflow


 

 

Comments

Post a Comment

Popular posts from this blog

Adding Image Alternate Text into WordPress Image Attachment using python-wordpress-xmlrpc Library

Keutamaan Tidur yang Sedikit Menurut para Ulama

Kisah Nabi Uzair a.s.