pkchenwang 2024-05-17 14:56 采纳率: 0%
浏览 11

Django如何设计多条件查询

在设计一个部门手机管理网页,目前搜索功能仅实现搜索手机品牌,期望可以在一个搜索框内实现更多搜索,诸如型号,使用人等

img

views代码如下


def phone_list(request):
    data_dict = {}
    value = request.GET.get("q")

    if value:
        data_dict["Brand__icontains"] = value
    page = int(request.GET.get('page', 1))
    page_size = 10
    start = (page - 1) * page_size
    end = page * page_size
    queryset = models.PhoneInfo.objects.filter(**data_dict)[start:end]
    print(queryset)


    for phone in queryset:
        print(phone.id, phone.Tnum, phone.Brand, phone.Model)

    total_count = models.PhoneInfo.objects.filter(**data_dict).count()
    total_page_count, div = divmod(total_count, page_size)
    if div:
        total_page_count += 1

    if total_page_count <= 2 * 10 + 1:
        start_page = 1
        end_page = total_page_count
    else:
        start_page = page - 5
        end_page = page + 5

    page_str_list = []
    for i in range(start_page, end_page + 1):
        if i == page:
            ele = '<li class="page-item active"><a class="page-link" href="?page={}">{}</a></li>'.format(i, i)
        else:
            ele = '<li class="page-item"><a class="page-link" href="?page={}">{}</a></li>'.format(i, i)
        page_str_list.append(ele)
    page_string = mark_safe("".join(page_str_list))

    return render(request, 'phone_list.html', {"queryset": queryset, "page_string": page_string})

请看下如何更改下代码实现上面期望的要求

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-17 14:56
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题

    您提问的目的是想要改进现有的Django网站,使其能够实现多条件查询功能,即在搜索框内输入关键词时,可以根据手机品牌、型号、使用人等不同条件进行搜索。

    图片内容

    您上传的图片显示了一个简单的搜索界面,上面有“Enter Brand to search..”,以及一个搜索框。图片中还列出了几个手机信息的示例,包括品牌、型号、OS版本和BT版本等。

    问题出现原因

    当前的搜索功能只能根据手机品牌进行搜索,没有实现对型号、使用人等其他条件的搜索。这是因为在views代码中,搜索逻辑只考虑了品牌字段,并且使用了icontains来实现模糊匹配。

    问题解决方案

    为了实现多条件查询,您需要修改views中的搜索逻辑,使其能够根据用户输入的关键词智能判断搜索条件,并执行相应的查询。这通常涉及到解析用户的输入,并根据输入内容的不同部分来构造查询。

    提供代码

    以下是修改后的views代码示例,它可以根据用户输入的关键词,对品牌、型号等进行搜索:

    def phone_list(request):
        data_dict = {}
        value = request.GET.get("q")
        
        # 根据输入的关键词,判断搜索条件
        if value:
            parts = value.split()
            for part in parts:
                if part.startswith('BT:'):
                    data_dict["BT_version__icontains"] = part[3:]
                elif part.startswith('OS:'):
                    data_dict["OS_version__icontains"] = part[3:]
                elif part.startswith('CT:'):
                    data_dict["id__icontains"] = part[3:]
                else:
                    data_dict["Brand__icontains"] = part
            queryset = models.PhoneInfo.objects.filter(**data_dict)
        else:
            queryset = models.PhoneInfo.objects.all()
    
        page = int(request.GET.get('page', 1))
        page_size = 10
        start = (page - 1) * page_size
        end = page * page_size
        queryset = queryset[start:end]
    
        # ... 省略分页和渲染部分代码 ...
    
        return render(request, 'phone_list.html', {"queryset": queryset, "page_string": page_string})
    

    代码运行方式

    • 确保您的Django项目已经设置好,并且PhoneInfo模型存在于您的应用中。
    • 将上述代码替换到您的views.py文件中相应的视图函数里。
    • 确保您的urls.py文件中已经配置了对应的路由。
    • 在Django的运行环境中,通过浏览器访问您的网站,并使用新的搜索功能。

    代码预期运行结果

    如果用户输入了如“Nokia 9300”这样的关键词,系统将搜索品牌为“Nokia”且型号为“9300”的手机。如果用户输入了如“OS:4.0”,则系统将搜索操作系统版本为“4.0”的所有手机。

    推荐相关链接

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月17日

悬赏问题

  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 关于#c语言#的问题,请各位专家解答!
  • ¥15 这个如何解决详细步骤
  • ¥15 在微信h5支付申请中,别人给钱就能用我的软件,这个的所属行业是啥?
  • ¥30 靶向捕获探针设计软件包
  • ¥15 别人给钱就能用我的软件,这个的经营场景是啥?
  • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…