跳转到主要内容

创建执行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')

自定义查询和过滤

提供的QueryFilter类非常基本。编写自定义QueryFilter类相当简单。例如,根据模型的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 (3.2 kB 查看散列)

上传时间:

支持者