在Python中自动完成字段
我有一个名为“name”的字段,“name”中输入的数据将进入数据库。每当我想输入一个新名字,例如“hello”,它应该显示以“he”开头的相关单词 我是Python新手。我们怎样才能做到这一点?我已经为此编写了一个函数在Python中自动完成字段,python,python-2.7,openerp-7,Python,Python 2.7,Openerp 7,我有一个名为“name”的字段,“name”中输入的数据将进入数据库。每当我想输入一个新名字,例如“hello”,它应该显示以“he”开头的相关单词 我是Python新手。我们怎样才能做到这一点?我已经为此编写了一个函数 def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100): if not args: args = []
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
if not args:
args = []
if context is None:
context = {}
ids = []
name = name + '%'
cr.execute("select name from learner_info where name like %s", (name,))
ids = cr.dictfetchall()
return self.name_get(cr, uid, ids, context)
如何在字段中调用此函数?让我稍微解释一下以下代码:
# this is just for demonstration purposes, for large sets this will blow up quickly
# "element" is comprised of a character [0], special item (id here) [1], next list [2]
class Root():
root = []
在这里,您可以读取表数据。
为了方便起见,我只使用了一个纯文本文件。
Name是指要建议的字符串,而id是行的id
# read names from file
def __init__(self, fname):
with open(fname, 'r', encoding='utf-8') as infile:
for line in infile:
name, id = line.split(" ")
self.add(name, int(id))
def add(self, name, item):
current = self.root
last = None
# for every character of string traverse the list
for character in name:
has = False
# for every character in current list compare character
for element in current:
last = element
if element[0] == character:
current = element[2]
has = True
break
if not has:
current.append([character, None, []])
last = current[-1]
current = current[-1][2]
我们在字符串的末尾,添加id
if last is not None:
last[1] = item
def delete(self):
pass # dunno if you need that =)
def traverse(self, node=root, partial=""):
list = []
for element in node:
if element[1] is not None:
print ("%s%s = %s" % (partial, element[0], element[1]))
list.append([partial+element[0], element[1]])
if len(element[2]) > 0:
list += self.traverse(element[2], partial+element[0])
return list
def lookup(self, partial):
print ("\nlooking up matches for \"%s%%\":" % (partial))
current = self.root
counter = 0
# for every character of string traverse
for character in partial:
# for every character in current list compare character
for element in current:
if element[0] == character:
current = element[2]
counter += 1
break
if counter == len(partial):
print (self.traverse(current, partial))
def test():
root = Root("names.txt")
root.traverse()
root.lookup("ro")
if __name__ == "__main__":
test()
我使用了以下names.txt:
迈克尔1
米克2
米克尔3
bla 5
罗德里戈2号
罗斯克斯51
罗伯托13
rosquin 1111让我稍微解释一下以下代码:
# this is just for demonstration purposes, for large sets this will blow up quickly
# "element" is comprised of a character [0], special item (id here) [1], next list [2]
class Root():
root = []
在这里,您可以读取表数据。
为了方便起见,我只使用了一个纯文本文件。
Name是指要建议的字符串,而id是行的id
# read names from file
def __init__(self, fname):
with open(fname, 'r', encoding='utf-8') as infile:
for line in infile:
name, id = line.split(" ")
self.add(name, int(id))
def add(self, name, item):
current = self.root
last = None
# for every character of string traverse the list
for character in name:
has = False
# for every character in current list compare character
for element in current:
last = element
if element[0] == character:
current = element[2]
has = True
break
if not has:
current.append([character, None, []])
last = current[-1]
current = current[-1][2]
我们在字符串的末尾,添加id
if last is not None:
last[1] = item
def delete(self):
pass # dunno if you need that =)
def traverse(self, node=root, partial=""):
list = []
for element in node:
if element[1] is not None:
print ("%s%s = %s" % (partial, element[0], element[1]))
list.append([partial+element[0], element[1]])
if len(element[2]) > 0:
list += self.traverse(element[2], partial+element[0])
return list
def lookup(self, partial):
print ("\nlooking up matches for \"%s%%\":" % (partial))
current = self.root
counter = 0
# for every character of string traverse
for character in partial:
# for every character in current list compare character
for element in current:
if element[0] == character:
current = element[2]
counter += 1
break
if counter == len(partial):
print (self.traverse(current, partial))
def test():
root = Root("names.txt")
root.traverse()
root.lookup("ro")
if __name__ == "__main__":
test()
我使用了以下names.txt:
迈克尔1
米克2
米克尔3
bla 5
罗德里戈2号
罗斯克斯51
罗伯托13
rosquin 1111更大的图景是什么?这个函数在隔离状态下成功了吗?没有,还有其他方法吗?更大的图景是什么?此函数是否在隔离状态下成功?否,是否有其他方法?