多个搜索字段无法按预期工作

时间:2019-07-15 10:47:54

标签: django ajax

我有3个搜索字段(event_name,event_loc,event_date),其中之一被填充返回了所有表数据,而必须返回一个。

views.py

def searchEvent(request):
    if request.is_ajax():
        q_event_name = request.POST.get('event_name')
        q_event_loc = request.POST.get('event_loc')
        q_event_date = request.POST.get('event_date')

        # return JsonResponse(dict(events=list(Event.objects.values('name', 'info'))))

        return JsonResponse(
            serializers.serialize('json', Event.objects.filter(
                Q(name__icontains=q_event_name) | Q(info__icontains=q_event_loc) | Q(start_event_dt__icontains=q_event_date))),
            safe=False)

custom.js

$.ajax({
        url: '/searchevent/',
        data: {
            'event_name': event_name,
            'event_loc': event_loc,
            'event_date': event_date
        },
        dataType: 'json',
        type: 'POST',
        success: function (data) {
            data = JSON.parse(data);
            event_html = '';
            for(var i in data){
            event_name = data[i]['fields']['name'];
            event_html = event_html + '<div class="col-md-4">' +
                '    <h5 class="card-title text-center pt-3">' + event_name + '</h5>' +
                '</div>';
            }
    document.getElementById("event-container").innerHTML = event_html;
        }
    });

例如,我的数据库中有两个事件

  1. name = aaa,loc = bbb,date = 2019-01-01
  2. name = ccc,loc = ddd,date = 2018-01-01

在搜索栏中,当我使用aaa搜索仅名称字段时,它将返回所有两个事件,我希望这仅返回我的第一个事件。

1 个答案:

答案 0 :(得分:1)

您正在使用Q表达式来构建查询(或条件)。

因此您的过滤器表达式将转换为:

name__icontains=q_event_name OR info__icontains=q_event_loc OR start_event_dt__icontains=q_event_date

例如,如果q_event_loc是一个空字符串-icontains将与每个info列(不为空)匹配。