创建执行Elasticsearch查询的表单
项目描述
创建执行ElasticSearch查询和过滤的Django表单。
安装
使用pip安装
pip install django-elasticfilter
使用
过滤器表单是标准的Django表单,有一些小的扩展。它们继承自elasticfilter.filterform.FilterForm。要在表单上声明搜索和过滤字段,这些字段应继承自elasticfilter.fields.BaseField
from elasticfilter.filterform import FilterForm
from elasticfilter.fields import Query, Filter
class MyFilterForm(FilterForm):
class FilterFormMeta:
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过滤结果
from django import forms
from django.db.models import get_models
from elasticfilter.filterform import FilterForm
from elasticfilter.fields import Filter
class ContentTypeFilter(Filter, forms.ChoiceField):
required = False
def __init__(self, models=None, **kwargs):
if models is None:
models = get_models()
self.choice_map = dict((model._meta.model_name, model)
for model in models)
choices = [(key, model.get_verbose_name())
for key, model in self.choice_map.items()]
kwargs.setdefault('choices', choices)
super(ContentTypeFilter, self).__init__(**kwargs)
def search(self, s, name, data):
value = data.get(name, None)
if not value:
return s
field = self.field or name
content_type = ContentType.objects.get_for_model(self.choice_map[value])
return s.filter(F(**{field: content_type.pk}))
class MyFilterForm(FilterForm):
content_type = ContentTypeFilter()
项目详情
关闭
django-elasticfilter-0.1.0.tar.gz的散列
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5580ade79cf24bc88bd3d4dd65a84faf387fa0d9243349e9c936c5aebc351050 |
|
MD5 | 3c06b1052ac402690aa22d0b84a2de43 |
|
BLAKE2b-256 | 2fff15321bbf5d6a64f4586fb653813b00abd861a1cffc4306a11d33f7dc3b8d |