搜寻在Django的通配符

时间:2011-03-08 08:47:59

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

我们如何在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/')

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

3 个答案:

答案 0 :(得分:6)

您可以使用contains查询,例如

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

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

可能field lookups会帮助你。它允许按单词的开头过滤,包含单词等。