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