创建运行ElasticSearch查询的表单
django-elasticfilter的Python项目详细描述
创建执行elasticsearch查询和筛选的django表单。
安装
使用pip安装:
pip install django-elasticfilter
使用
过滤表单是标准的django表单,有一些小的扩展。 它们继承自elasticfilter.filterform.filterform。 要搜索和筛选的字段声明为表单上的字段, 它应该继承自elasticfilter.fields.basefield
fromelasticfilter.filterformimportFilterFormfromelasticfilter.fieldsimportQuery,FilterclassMyFilterForm(FilterForm):classFilterFormMeta:s=S().get_es(**ES_SETTINGS)\ .indexes('my-index')\ .doctypes('my-doctype')match=Query(required=False,fields=['_all','_partial'])type=Filter(field='type')
自定义查询和筛选
提供的Query和Filter类非常基本。 编写自定义的Query和Filter类非常简单。 例如,根据模型的ContentType筛选结果:
fromdjangoimportformsfromdjango.db.modelsimportget_modelsfromelasticfilter.filterformimportFilterFormfromelasticfilter.fieldsimportFilterclassContentTypeFilter(Filter,forms.ChoiceField):required=Falsedef__init__(self,models=None,**kwargs):ifmodelsisNone:models=get_models()self.choice_map=dict((model._meta.model_name,model)formodelinmodels)choices=[(key,model.get_verbose_name())forkey,modelinself.choice_map.items()]kwargs.setdefault('choices',choices)super(ContentTypeFilter,self).__init__(**kwargs)defsearch(self,s,name,data):value=data.get(name,None)ifnotvalue:returnsfield=self.fieldornamecontent_type=ContentType.objects.get_for_model(self.choice_map[value])returns.filter(F(**{field:content_type.pk}))classMyFilterForm(FilterForm):content_type=ContentTypeFilter()