QuerySet库是一个用于创建库的界面,它通过查找提供分页和筛选。它可以通过API获取对象。
django-queryset-galler的Python项目详细描述
Django Queryset画廊
QuerySet库是一个用于创建库的界面,它通过查找提供分页和筛选。它对于通过api获取对象非常有用。
目录
如何创建过滤器
每个筛选器都继承自基类QuerySetFilter
,并包含两个参数:key
和lookup
。过滤器通过标准方法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_name
、last_name
和nickname
。QuerySetGallery
支持通过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_page
和necessary_page
无效,则会引发错误404。
分页数据示例:
data = {
'objects_count': 20,
'page_number': 2,
'page_count': 1,
'per_page': 100,
}