跳转到主要内容

django-mongoengine-filter是一个可重用的Django应用,灵感来源于django-filter,允许mongoengine用户动态过滤查询集。

项目描述

django-mongoengine-filter是一个可重用的Django应用,允许用户动态过滤mongoengine查询集。它与流行的django-filter库非常相似,设计成可以作为MongoEngine的即插即用替代品(尽可能多)。

有关Read the docs的完整文档。

PyPI Version Supported Python versions Build Status Documentation Status GPL-2.0-only OR LGPL-2.1-or-later Coverage

要求

  • Python 3.7, 3.8, 3.9, 3.10或3.11。

  • MongoDB 3.x, 4.x, 5.x。

  • Django 2.2, 3.0, 3.1, 3.2, 4.0或4.1。

安装

使用pip安装

pip install django-mongoengine-filter

或最新开发版本

pip install https://github.com/barseghyanartur/django-mongoengine-filter/archive/master.zip

用法

示例文档

from mongoengine import fields, document
from .constants import PROFILE_TYPES, PROFILE_TYPE_FREE, GENDERS, GENDER_MALE

class Person(document.Document):

    name = fields.StringField(
        required=True,
        max_length=255,
        default="Robot",
        verbose_name="Name"
    )
    age = fields.IntField(required=True, verbose_name="Age")
    num_fingers = fields.IntField(
        required=False,
        verbose_name="Number of fingers"
    )
    profile_type = fields.StringField(
        required=False,
        blank=False,
        null=False,
        choices=PROFILE_TYPES,
        default=PROFILE_TYPE_FREE,
    )
    gender = fields.StringField(
        required=False,
        blank=False,
        null=False,
        choices=GENDERS,
        default=GENDER_MALE
    )

    def __str__(self):
        return self.name

示例过滤器

import django_mongoengine_filter

class PersonFilter(django_mongoengine_filter.FilterSet):

    profile_type = django_mongoengine_filter.StringFilter()
    ten_fingers = django_mongoengine_filter.MethodFilter(
        action="ten_fingers_filter"
    )

    class Meta:
        model = Person
        fields = ["profile_type", "ten_fingers"]

    def ten_fingers_filter(self, queryset, name, value):
        if value == 'yes':
            return queryset.filter(num_fingers=10)
        return queryset

示例视图

基于功能的视图

def person_list(request):
    filter = PersonFilter(request.GET, queryset=Person.objects)
    return render(request, "dfm_app/person_list.html", {"object_list": filter.qs})

或基于类的视图

from django_mongoengine_filter.views import FilterView

class PersonListView(FilterView):

    filterset_class = PersonFilter
    template_name = "dfm_app/person_list.html"

示例模板

<ul>
{% for obj in object_list %}
    <li>{{ obj.name }} - {{ obj.age }}</li>
{% endfor %}
</ul>

示例请求

  • GET /persons/

  • GET /persons/?profile_type=free&gender=male

  • GET /persons/?profile_type=free&gender=female

  • GET /persons/?profile_type=member&gender=female

  • GET /persons/?ten_fingers=yes

开发

测试

在您的开发环境中运行测试,请输入

pytest -vrx

要测试所有支持的Python版本,请输入

tox

运行MongoDB

最简单的方法是通过Docker运行

docker pull mongo:latest
docker run -p 27017:27017 mongo:latest

编写文档

请保持以下层次结构。

=====
title
=====

header
======

sub-header
----------

sub-sub-header
~~~~~~~~~~~~~~

sub-sub-sub-header
^^^^^^^^^^^^^^^^^^

sub-sub-sub-sub-header
++++++++++++++++++++++

sub-sub-sub-sub-sub-header
**************************

许可证

GPL-2.0-only OR LGPL-2.1-or-later

支持

对于任何安全问题,请联系作者部分提供的电子邮件。

对于整体问题,请访问GitHub

作者

Artur Barseghyan <artur.barseghyan@gmail.com>

项目详情


下载文件

下载适用于您平台的项目文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

django-mongoengine-filter-0.4.2.tar.gz (37.1 kB 查看哈希)

上传时间

构建分发

django_mongoengine_filter-0.4.2-py2.py3-none-any.whl (19.5 kB 查看哈希)

上传时间 Python 2 Python 3

由以下机构支持