Как позволить сортировать в администраторе Django по пользовательскому list_display полю, которое не имеет поля DB, ни annotatable

У меня есть пользовательское list_display поле, которое ответственно за столбец целых чисел на одной из моих администраторских страниц.

Я должен позволить сотрудникам виду согласно ему.

Существует решение для того, как достигнуть этого, если целое число представляет количество/среднее число/и т.д. некоторого поля DB, которое не имеет место для меня.

[решение для того случая здесь: администратор Django: как отсортировать по одному из пользовательских list_display полей, которое не имеет никакого поля базы данных]

Какие-либо идеи, как я могу достигнуть этой сортировки, на самом деле не создавая и поддерживая поле DB для значений?

5
задан Community 23 May 2017 в 12:13
поделиться

1 ответ

Сортировка выполняется в движке БД (в порядке следования), поэтому я не думаю, что вы сможете добиться желаемого, если не материализуете поле в модели. Вычисленные состояния на данном этапе не могут быть отсортированы (по крайней мере, не в интерфейсе администратора, если вы использовали свой собственный интерфейс, вы могли бы использовать extra ).

Если проблема заключалась в фильтрации, вы могли бы написать собственный FilterSpec (который нигде не документирован, но у SO есть хороший пример ).

Но для сортировки в админке, боюсь, единственный вариант - это материализованное поле.

Редактировать:

Хммм ...

Вы могли бы кое-что попробовать. Возможно (хотя я не думаю, что это где-либо официально задокументировано) изменить набор запросов, используемый ModelAdmin. Если ваше вычисляемое поле достаточно простое, чтобы быть встроенным в сам запрос, вы можете сделать что-то вроде:

class BlahAdmin(admin.ModelAdmin):
    ... Whatever definitions ...

    def queryset(self, request):
        return Blah.objects.extra(select={'computed': "count(field_x)"})

Это может сработать. Однако это не проверено.

5
ответ дан 14 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: