0
我没有很多Python体验,也无法弄清楚如何使用here中描述的SearchVector功能来使用字符串列表。我正在使用Django 1.10和PostgreSQL 9.6,并且已经证实,如果我手动编写这些字段,这将起作用。如何将SearchVector与字符串列表中的多个字段一起使用
该函数来自基于类的视图,其目的是从表单接收字符串,然后对MyApp中所有模型中的所有CharField执行全文搜索,然后返回结果(使用itertools进行规划以合并多个QuerySet一旦我得到这个工作)。我不想对字段进行硬编码,因为我们会定期添加新对象和新字段 - 这是一种企业中间件应用程序,我无法掌握数据。
def get_queryset(self):
searchTargets = defaultdict(list)
myModels = (obj for obj in apps.get_models()
if obj._meta.label.startswith('myapp')
and not obj._meta.label == 'myapp.ConfigItem')
for thing in myModels:
fieldNames = (x.name for x in thing._meta.fields)
for thisField in fieldNames:
if thing._meta.get_field(thisField).get_internal_type() == 'CharField':
searchTargets[thing._meta.object_name].append(thisField)
user_query=self.request.GET['user_query']
for key in searchTargets.iterkeys():
targetClass=class_for_name('myapp.models',key)
results = targetClass.objects.annotate(
search=SearchVector(searchTargets[key]),
).filter(search=user_query)
#only a single QuerySet will be returned.
return results
我试过','。join(MyList),但当然这只是让一个大字符串。