Добавьте поле выбора в search_fields в django admin

Скажем, у меня есть модель с полем выбора, которое выглядит так:

STARTED = 1
DONE = 0

STATUSES = {
    (STARTED, 'Started'),
    (DONE, 'Done'),
}

status = models.IntegerField(choices=STATUSES)

Я хотел бы добавить поле status в search_fields = () в admin.py как ниже.

search_fields = (status,)

Поиск работает по целому числу, но я бы хотел выполнить поиск по отображаемому тексту "Готово" и "Начато".

1 ответ

Решение

Вы должны быть в состоянии сделать это, переопределив get_search_results метод вашей модели админ.

# This dictionary lets you convert the text back to the integer.
# You might prefer to build it dynamically instead.

TEXT_TO_STATUS_INTEGER = {
    'Started': 1,
    'DONE': 0,
}

class MyModelAdmin(admin.ModelAdmin):
    def get_search_results(self, request, queryset, search_term):
        queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term)
        if search_term in TEXT_TO_STATUS_INTEGER:
            queryset |= self.model.objects.filter(status=TEXT_TO_STATUS_INTEGER[search_term])
    return queryset, use_distinct
Другие вопросы по тегам