我有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;
}
});
例如,我的数据库中有两个事件
在搜索栏中,当我使用aaa搜索仅名称字段时,它将返回所有两个事件,我希望这仅返回我的第一个事件。
答案 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
列(不为空)匹配。