【问题标题】:Wildcard searching in DjangoDjango中的通配符搜索
【发布时间】:2011-07-10 22:53:48
【问题描述】:

我们如何在 Django 中进行通配符搜索。如果我从数据库中的列表中过滤用户名,如何使用这些确切的用户名或其中的一部分显示过滤后的数据?

def filter(request):
    val3='' 
    if request.GET.has_key('choices'):
        val2=request.GET.get('choices')
    if request.GET.has_key('textField'):
        val3=request.GET.get('textField')
    if request.POST:
        val2=request.POST.get('choices')    
        val3=request.POST.get('textField')
    if val2=='Designation':                
        newData = EmployeeDetails.objects.filter(designation=val3) 
        flag=True 
    elif val2=='Name':
        newData = EmployeeDetails.objects.filter(userName=val3)
        flag=True 
    elif val2=='EmployeeID':
        newData = EmployeeDetails.objects.filter(employeeID=val3)  
        flag=True       
    elif val2=='Project':
        newData = EmployeeDetails.objects.filter(project=val3)   
        flag=True   
    elif val2=='DateOfJoin':
        newData = EmployeeDetails.objects.filter(dateOfJoin=val3) 
        flag=True       
    else:
        return HttpResponseRedirect('/employeeList/')

这是我的过滤功能。现在它用精确的词过滤。我想显示用户名,即使其中一部分用于过滤。请帮我解决这个问题,因为我是 Django 新手

【问题讨论】:

    标签: django django-models django-templates django-views django-queryset


    【解决方案1】:

    你可以使用contains查询例如

    Entry.objects.get(headline__contains='Lennon')
    

    http://docs.djangoproject.com/en/dev/ref/models/querysets/#contains

    还有其他选项,例如startswithendswith,您甚至可以在大多数数据库上进行regex 搜索。

    【讨论】:

    • @rv_k,其他人已经根据您的代码给出了示例,但我建议您先阅读 django 文档和教程
    【解决方案2】:

    尝试使用不太严格的过滤器,例如 __contains:

    elif val2=='Name':
            newData = EmployeeDetails.objects.filter(userName__contains=val3)
            flag=True 
    

    文档:http://docs.djangoproject.com/en/dev/ref/models/querysets/#contains

    【讨论】:

    • 但是这里的userName是表中的一个字段。它给了我这个错误“FieldError at /filter/ Cannot resolve keyword 'userName_contains' into field。”
    • 您是否在 userName 和 contains 之间使用单个下划线?查找以双下划线为前缀。至少这是我从您发布的错误中得出的结论。
    • 嗯...这正是错误..我只给了1个下划线..非常感谢您的帮助..我的问题已经解决了..:)
    • 嘿...我对此还有 1 个疑问..它不区分大小写吗?
    • 阅读文档链接,它有很多示例和更多查找类型。对于不区分大小写的过滤,您可以尝试:__icontains
    【解决方案3】:

    field lookups 可能会在这里为您提供帮助。它允许按单词的开头,包含单词等进行过滤。

    【讨论】:

    • 例如:newData = EmployeeDetails.objects.filter(designation__contains=val13) 或 newData = EmployeeDetails.objects.filter(designation__startswith=val3)
    • 当我尝试这样做时,它给了我“字段错误”。这里指定,用户名都是 db 中的字段名称
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2011-03-14
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多