[英]Custom query filter in django admin
這是我的模型代碼:
class Quote(models.Model):
"""Quote model."""
quote_text = models.TextField(unique=True)
author = models.ForeignKey(Author)
topic = models.ForeignKey(Topic)
tags = models.ManyToManyField(Tag)
language = models.ForeignKey(Language)
hit = models.IntegerField(default=0)
published = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
我想根據字符長度過濾所有報價,這是我在django admin中的查詢。
class QuoteCountFilter(admin.SimpleListFilter):
"""Filter based on quote_text characters count."""
title = _('Quote Text Char Count')
parameter_name = 'quotelength'
def lookups(self, request, model_admin):
return (
('lessthan50', _('Less than 50')),
('morethan50', _('More than 50')),
)
def queryset(self, request, queryset):
if self.value() == 'lessthan50':
return queryset.extra(select={"val": "SELECT id FROM web_quote WHERE character_length(quote_text) < 50"})
但是,它返回編程錯誤不止是用作表達式的子查詢返回的一行
任何想法如何解決?
我試圖是要找到所有Quote
S其中quote_text
長度少於50個字符
告別extra
問好長度
from django.db.models.functions import Length
queryset.annotate(len=Length('quote_text').filter(len__lt=50)
更整潔,更安全,更短
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.