pro版本里面 choice类型数据 搜索需要怎么设置

作者:cn-jack 325 浏览 5 评论 发布时间:2019-12-23 16:19:36

非pro版本里面,可以通过修改get_search_results(self, request, queryset, search_term)这个函数来进行choice类型字段的搜索,但pro版本里面 search_term值总是为[],导致无法搜索choice类型

Loading...
评论列表 5条评论
社区小助手
2020-05-04 18:14:51

pro里面是调用get_queryset的,有request 可以获取到查询的参数,然后返回queryset获取数据结果。

cn-jack
2020-05-04 18:14:50

get_queryset应该不行吧 主要是需要修改查询条件,把choice的查询条件,从value修改为对应的key

社区小助手
2020-05-04 18:14:50

pro中暂时没有对 get_search_results进行支持,不过可以改用get_queryset可以实现同样的效果。

    def get_queryset(self, request):
        """
        重写默认查询方法,可以用于数据权限控制
        例如张三登录后,只显示张三的数据,李四登录后就只显示李四的数据
        :param request:
        :return:
        """
        qs = super().get_queryset(request)
        return qs.filter(id__gte=1)
cn-jack
2020-05-04 18:14:50
ROLE_CHOICES = (
        (1, '会员'),
        (2, '店铺'),
        (3, '经纪人'),
    )

def get_search_results(self, request, queryset, search_term):
        search_term_list = get_choice_search_term_list(
            search_term, User.ROLE_CHOICES)

        return super().get_search_results(request, queryset, ' '.join(search_term_list))

def choices_value_info(choices):
    return {v: k for k, v in choices}


def get_choice_search_term_list(search_term, choices):
    search_term_list = search_term.split()
    choice_info = choices_value_info(choices)

    for index, bit in enumerate(search_term_list):
        if bit in choice_info:
            search_term_list[index] = str(choice_info[bit])

    return search_term_list
社区小助手
2020-05-04 18:14:50

看下代码怎么写的?