Case Inasensitive search in containment filter

时间:2012-10-04 11:46:05

标签: django filter

我需要在包含过滤器中执行Case Insensitive搜索,而不是使用精确的case sensitve匹配。

def filter(request, fname, fvalue):

    list = HmsPatient.objects.filter(**{fname:fvalue})
    c = {'list' : list}
    return render_to_response('patient/list.html', c, context_instance=RequestContext(request))

def search(request):
    if request.method == 'POST':
        fname = request.POST.get('filter_name')
    fvalue = request.POST.get('filter_value')
        return filter(request, fname, fvalue);
    else:
        action = HmsPatient().get_search_url()
        form = HmsPatientForm()
        c = {'form': form, 'action' : action}
        c.update(csrf(request))
        return render_to_response('search.html', c, context_instance=RequestContext(request))

2 个答案:

答案 0 :(得分:2)

Django允许您使用iexact进行不区分大小写的匹配。例如:

Blog.objects.get(name__iexact="beatles blog")

在您的情况下,因为fname是变量,您必须将__iexact附加到词典中的键。

key = fname + '__iexact'
list = HmsPatient.objects.filter(**{key: fvalue})

Django还支持containsicontains,您可以使用相同的方式。

答案 1 :(得分:2)

使用双引号n“icontains”进行不区分大小写的搜索。

def filter(request, fname, fvalue):

    key = fname + '__icontains'
    list = HmsPatient.objects.filter(**{key: fvalue})
    c = {'list' : list}
    return render_to_response('patient/list.html', c, context_instance=RequestContext(request))

使用双引号n“包含”用于案例敏感搜索。

def filter(request, fname, fvalue):
    key = fname + '__contains'
    list = HmsPatient.objects.filter(**{key: fvalue})
    c = {'list' : list}
    return render_to_response('patient/list.html', c, context_instance=RequestContext(request))
在MySQL中选择排序规则使得数据值区分大小写,如果您不选择任何排序规则,您的数据库将不区分大小写,即AbC = abc