QuerySet库是一个用于创建库的界面,它通过查找提供分页和筛选。它可以通过API获取对象。

django-queryset-galler的Python项目详细描述


Django Queryset画廊

QuerySet库是一个用于创建库的界面,它通过查找提供分页和筛选。它对于通过api获取对象非常有用。

目录

如何创建过滤器

每个筛选器都继承自基类QuerySetFilter,并包含两个参数:keylookup。过滤器通过标准方法queryset methodfilter应用。因此,lookup将用于筛选。key是筛选器的ID,当您向库引擎dict提供用于筛选的参数时使用它。过滤器通过key从dict获取参数。

from queryset_gallery.filters import QuerySetFilter

UserEmail = QuerySetFilter(
    key='email',
    lookup='email__icontains'
)
UserIsStaff = QuerySetFilter(
    key='is_staff',
    lookup='is_staff'
)

如何创建库

QuerySetGallery中库的基类。当您需要创建库时,可以提供djangomodel,并在filters控件中设置QuerySetFilter对象:

from django.contrib.auth.models import User
from queryset_gallery.gallery import QuerySetGallery

class UserGallery(QuerySetGallery):
    model = User
    filters = [UserEmail, UserIsStaff]

画廊有一个方法get_page。它有几个参数,如:

def get_page(self, page_number, per_page, filter_params: dict = None, order_by_lookups: list = None, queryset_params=None, queryset=None):

第一个和第二个参数是paginator的参数。第三个参数filter_params是一个带过滤器参数的dict。它包括过滤键和参数。此外,还可以提供源queryset或重写方法get_queryset,默认情况下,所有模型对象都将用作源。另外,如果有额外的参数用于获取queryset,则可以通过queryset_params提供它。最后一个参数order_by_lookups是查询集方法order_by()的查找列表。列表中的所有查找都将应用于QuerySet。最后,库返回分页数据的queryset和dict。

gallery = UserGallery()
filter_params = {
    'email': 'admin',
    'is_staff': True,
}

gallery.get_page(per_page=10, page_number=1, filter_params=params, order_by_lookups=['email'])

如何使用简单搜索

简单的搜索是这样一种情况:参数列表['Alex', 'Ambassador']和几个用于过滤的字段,例如first_namelast_namenicknameQuerySetGallery支持通过QuerySetSimpleSearch进行简单搜索。它只是一个可以添加到constfilters的过滤器。对于上面的示例,QuerySetSimpleSearch创建几个带有条件或的django q对象并执行它们。QuerySetSimpleSearch的创建方式与QuerySetFilter相同,但获取查找列表而不是一个查找:

from django.contrib.auth.models import User

users = User.objects.all()

UserSimpleSearch = QuerySetSimpleSearch(
    key='query',
    lookups=[
        'first_name__icontains',
        'last_name__icontains',
        'nickname__icontains'
    ]
)
UserSimpleSearch.apply(users, ['Alex', 'Ambassador'])

如何使用分页

不需要使用Paginator,因为QuerySetGallery类可以使用它。QuerySetGallery有两个细微差别。如果要获取所有对象,可以将per_page设置为-1。这样分页将返回所有对象。如果per_pagenecessary_page无效,则会引发错误404。

分页数据示例:

data =  {
    'objects_count': 20,
    'page_number': 2,
    'page_count': 1,
    'per_page': 100,
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Cassandra复制因子大于节点数   java J2EE JTA事务回滚不适用于OSE Glassfish 4.0(Build 89)   java spring安全预认证用户登录   org的java类文件。反应流。从RxJava编译示例时未找到Publisher?   java在使用dataFormat作为POJO通过Camel调用Web服务时无法设置SOAP标头   Javafx类的java静态实例   java如何防止一个部件在关闭时覆盖另一个部件的位置   sql server无法从我的java代码连接到数据库   java在JList(Swing)中显示带有的ArrayList   从Java中的CXF服务获取WSAddressing数据   使用资产文件夹进行java简单json解析(本地)   java LDAPException未绑定的无效凭据   JavaJSFspring部署到weblogic   JAVA中字符数组中的特定元素排列?   如果脚本位于不同的目录中,则ant不会使用exec标记运行Javashell脚本