在Django管理员中将选择字段添加到search_fields [英] Add a choicefield to search_fields in django admin

查看:326
本文介绍了在Django管理员中将选择字段添加到search_fields的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说,我有一个带有选择字段的模型,如下所示:

Say, I have a model with a choice field that looks like this:

STARTED = 1
DONE = 0

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

status = models.IntegerField(choices=STATUSES)

我想添加字段<$ c从$ c> status 到 admin.py 中的 search_fields =(),如下所示。

I'd like to add the field status to search_fields = () in admin.py like below.

search_fields = (status,)

它可以按整数搜索,但是我想根据显示的文本 Done和 Started进行搜索。

It works searching by integer but I'd like to search based on the display text "Done" and "Started."

推荐答案

您应该可以通过覆盖 get_search_results 方法。

You should be able to do this by overriding the get_search_results method of your model admin.

# 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

这篇关于在Django管理员中将选择字段添加到search_fields的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆