这里说的关键字查询,是要实现输入 fire water这两个词,然后后台将这两个词进行模糊查询。
Vue部分,用户在搜索框输入需要查询的内容后,前端将用户输入的内容进行判断,如果有空格,那么根据空格将字符串分开;如果没有空格,那么无需分开。
1 2 3 4 5 6 7 8 9
| if(this.text.indexOf(' ') !== -1){ this.text = this.text.split(' ') this.text = JSON.stringify(this.text) }
this.get_goods();
|
前端的处理就这么简单,那么到后台了:
首先,获取参数:
1 2 3 4 5
| text = request.GET.get('text', None) if ',' in text: text = request.GET.get('text').replace("[", '').replace("]", '').replace('"', '').split(',')
|
接下来就到了关键时刻,对查询出来的数据进行处理:
1 2 3 4 5 6 7 8 9 10 11
| if type(text) == list: all1 = [] for i in text: my_list = Goods.objects.filter(name__contains=i).all() all1.extend(my_list) all1 = list(set(all1))
|
这样就对数据处理好了,没有重复数据,不会出现在查询”一加手机壳”的时候将”一加”有关的所有数据查出来又将”手机壳”有关的所有数据查出来后拼接在一起可能导致的同一数据出现两次的情况(如数据名为: 一加手机壳)。
然后返回给前端数据:
1 2 3 4 5 6
| goods = all1[start_data: end_data]
goodser = GoodsSer(goods, many=True)
return Response({'code': 200, 'page_long': page_long, 'data': goodser.data, 'item_num': len(all1)})
|