4.如何让计算字段可以过滤
你有Heroadmin ,像下面这样:
@admin.register(Hero)class HeroAdmin(admin.ModelAdmin):list_display = ("name", "is_immortal", "category", "origin", "is_very_benevolent")list_filter = ("is_immortal", "category", "origin",)def is_very_benevolent(self, obj):return obj.benevolence_factor > 75
如果有一个 is_very_benevolent计算字段,你的admin页面会像这样一样:
你已经在模型字段中添加了过滤,但是你还想计算字段添加过滤,为了做到这个,你需要这样子类化SimpleListFilter
class IsVeryBenevolentFilter(admin.SimpleListFilter):title = 'is_very_benevolent'parameter_name = 'is_very_benevolent'def lookups(self, request, model_admin):return (('Yes', 'Yes'),('No', 'No'),)def queryset(self, request, queryset):value = self.value()if value == 'Yes':return queryset.filter(benevolence_factor__gt=75)elif value == 'No':return queryset.exclude(benevolence_factor__gt=75)return queryset
并且将你的list_filter改为:list_filter = ("is_immortal", "category", "origin", IsVeryBenevolentFilter)
这样你可以过滤你的计算字段,admin就变成了这样:

