Django admin добавляет list_filter на основе пользовательского поля

Я пытаюсь создать пользовательский list_filter в админке django. Пользовательское поле прекрасно работает в админке, но когда я добавляю его в list_filter, я получаю ERRORS: <class 'whosnext.admin.WhosNextTrackingAdmin'>: (admin.E116) The value of 'list_filter[1]' refers to 'get_is_different', which does not refer to a Field.

Я создал пользовательский SimpleListFilter для обработки этого, но он также говорит ERRORS: <class 'whosnext.admin.WhosNextTrackingAdmin'>: (admin.E116) The value of 'list_filter[1]' refers to 'MatchedNamesFilter', which does not refer to a Field.

Мне интересно, как я могу создать list_filter для этого пользовательского поля. Код следующий (все в файле admin.py).

Django 3.2.3

class MatchedNamesFilter(admin.SimpleListFilter):
    title = "Matched Status"
    parameter_name = "get_is_different"
    
    def lookups(self, request, model_admin):
        return [(
            ("matched", "Matched"),
            ("not_matched", "Not Matched"),
            ("na", "N/A")
        )]
    
    def queryset(self, request, queryest):
        if self.value() == "matched":
            return queryest.distinct().filter(get_is_different="Matched")
        if self.value() == "not_matched":
            return queryest.distinct().filter(get_is_different="Does Not Match")
        if self.value() == "na" or self.value == None:
            return queryest.distinct().filter(get_is_different__isnull=True)

@admin.register(WhosNextTracking)
class WhosNextTrackingAdmin(admin.ModelAdmin):
    list_display = ['tsa', 'date_time_clicked', 'get_case_number', 'get_triage_failed', 'who_was_picked', 'who_case_was_actually_assigned_to', 'get_is_different']
    list_filter = [('date_time_clicked', DateFieldListFilter), 'get_is_different']
    search_fields = ['tsa', 'who_was_picked', 'get_case_number', 'who_case_was_actually_assigned_to']



  def get_case_number(self, obj):
        case_number = eval(obj.case_details)['case_number']
        return case_number
    get_case_number.admin_order_field = 'case_number'
    get_case_number.short_description = 'Case Number'
    
    def get_triage_failed(self, obj):
        triage_failed = eval(obj.triage_result)['Error']
        if triage_failed:
            return format_html(triage_failed)
        else:
            return "Successful"
    get_triage_failed.admin_order_field = 'triage_failed'
    get_triage_failed.short_description = 'Triage Failed'
        
    def get_is_different(self, obj):
        if obj.original_owner_set:
            if obj.who_was_picked == obj.who_case_was_actually_assigned_to:
                return "Matched"
            else:
                return "Does Not Match"
        else:
            return "N/A"
    get_is_different.admin_order_field = 'get_is_different'
    get_is_different.short_description = 'Triage Matched Assignee'

Спасибо

Вернуться на верх