DJango, пользовательский фильтр с пользовательским методом list_display
Я пытаюсь фильтровать по пользовательскому методу, который я сделал для столбца language
. В admin.py
у меня есть следующее;
from django.contrib import admin
from .models import *
class MovieAdminModel(admin.ModelAdmin):
search_fields= ('title_en')
list_display = ('get_language',)
list_filter = ('get_language')
def get_language(self, obj):
if obj.language==1:
return 'Persian With English Subtitle'
else:
return 'Persian'
get_language.admin_order_field = "language"
get_language.short_description = "language"
В list_filter
я использую get_language
и возвращается эта ошибка Значение 'list_filter[0]' относится к 'get_language', который не относится к полю. Если я использую language
в list_filter
, фильтры показывают yes
или no
. Фильтр должен показывать либо Persian With English Subtitle
, либо Persian
. Как мне решить?
Вам нужно создать пользовательский фильтр администратора для этой задачи, примерно так:
from django.contrib.admin import SimpleListFilter
class LanguageFilter(SimpleListFilter):
title = 'Language'
parameter_name = 'language'
def lookups(self, request, model_admin):
return [
('Persian With English Subtitle', 'Persian With English Subtitle'),
('Persian', 'Persian')
]
def queryset(self, request, queryset):
value = self.value()
if value == 'Persian With English Subtitle':
return queryset.filter(language=1)
return queryset.exclude(language=1)
class MovieAdminModel(admin.ModelAdmin):
list_filter = (
LanguageFilter,
)
...