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,
    )
    ...
Вернуться на верх