如何使用Django在数据库中搜索数据?

时间:2016-05-14 18:34:13

标签: django database search

我在数据库中有表,其中包含2或3个单词的名称列表。 所以我希望当用户在输入中输入任何字符串时,该字符串将被拆分为字符明智,然后每个字符与数据库中的字符串匹配。在atlast哪个字符串匹配用户字符串的更多字符,结果将根据字符匹配存储在数组中。它还依赖用户输入字符串模式。

我给你一个我想要的例子

在下表中存储名称

QImage window::showImage(cv::Mat mat)
{
  cv::Mat tmp;
  mat.convertTo(tmp, CV_8U);
  cvtColor(tmp, tmp, CV_BGR2RGB);
  QImage img = QImage((const unsigned char *)(tmp.data), tmp.cols, tmp.rows, tmp.step, QImage::Format_RGB888);
  return img;
}

用户输入字符串为:

Neeraj Kumar
Pankaj Sharma
Rahul kapoor

然后结果如下:

rkp

原因:

1.Rahul Kapoor
2.Neeraj Kumar
3.Pankaj Sharam

我希望在Django框架中使用更少的代码进行此搜索,但无论如何任何人都可以使用任何语言提供代码。

我认为这也有助于其他人更好地进行搜索

2 个答案:

答案 0 :(得分:0)

iregex独立过滤QuerySet案例,如此

Entry.objects.filter(name__iregex=r'[rkp]')

将返回所有Entryname个对象,其中包含任意({1}}个字符。

然后你可以在Python中进行排序。

修改

这应该这样做。

[]

答案 1 :(得分:0)

names = ['Neeraj Kumar', 'Pankaj Sharma', 'Rahul kapoor']
letters = "rkp"
# All lower case to be case insensitive
data = [x.lower() for x in names]
chars = list(letters.lower())

# Result groups collectors
d1,x= [],[]
for item in data:
    indexes = [item.find(c) for c in chars if item.find(c) > 0]
    d1.append(len(indexes))
for i in range(len(names)):
    if max(d1) != 0:
        pos = d1.index(max(d1))
        x.append(names[pos])
        del d1[pos]
        del names[pos]
print(x)

这样做更好,因为任何列表数据都不匹配任何不显示的输入字符串字符,所有匹配数据都存储在匹配字符顺序的单个列表中。