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'
Спасибо