gpt4 book ai didi

python - 在 django admin 中仅按年份过滤

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:00 24 4
gpt4 key购买 nike

我想在管理面板中创建一个过滤器,以根据年份过滤事件。我创建了一个年份列表,但我不知道如何将它与查找和查询集结合起来。

class SearchByYear(admin.SimpleListFilter):
title = _('title')
parameter_name = 'year'
year_list = models.Event.objects.values_list('date', flat=True)

y = [i.year for i in year_list]
print('this is list only with years: ', y)

def lookups(self, request, model_admin):
return (
('year', _('2018')),
('year1', _('2019')),
)

def queryset(self, request, queryset):
if self.value() == 'year':
return queryset.filter(date__year=2018)
if self.value() == 'year1':
return queryset.filter(date__year=2019)

最佳答案

您可以将年份作为选项传递,然后在过滤时使用它们:

from django.db.models.functions import <b>ExtractYear</b>

class SearchByYear(admin.SimpleListFilter):
title = _('title')
parameter_name = 'year'

def lookups(self, request, model_admin):
year_list = models.Event.objects.annotate(
<b>y=ExtractYear('date')</b>
).order_by('y').values_list('y', flat=True).distinct()
return [
<b>(str(y), _(str(y)))</b> for y in year_list
]

def queryset(self, request, queryset):
if self.value() is not None:
return queryset.filter(date__year=<b>self.value()</b>)
return queryset

因此我们使用lookups 来获取不同的年份,然后我们使用 .filter(date__year=self.value()) 过滤选定的年份查询。

翻译 _(str(y)) 不是绝对必要的。如果年份在某些文化中有不同的翻译(例如中国/日本/罗马年份),这可能会很有用。但是翻译年份通常没有问题,因为如果没有找到翻译,翻译将执行“回退”到原始值。

关于python - 在 django admin 中仅按年份过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51473652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com