问题描述
当使用 Graphene 的 Relay Connection 字段时,通过查询集进行分页非常容易。客户端传递参数(first
、after
、before
、last
),然后通过返回查询集,解析器自动分页。
对我来说,一个超级强大的模式是,如果你可以缓存(全局,使用 Memcached/Redis 等)查询集,无论传递的参数组合如何。这将使分页变得非常流畅、高效、可扩展。
这是我尝试执行此操作的示例:
# Create a memoized queryset using cache_memoize,but Could be any library
from cache_memoize import cache_memoize
# This will create a cache key using the arguments passed to the function
cache_memoize(5000)
def get_paginated_my_model(**kwargs):
# How do I pass the arguments here?
return MyModel.objects.all()
# Then...in our resolver
def resolve_my_models(self,info,**kwargs):
print(kwargs) # e.g. {'after': 'YXJyYXljb25uZWN0aW9uOjE=','first': 5}
return get_paginated_my_model(kwargs)
这适用于创建缓存键,但这里存储的查询集将始终是完整的查询集。解析器似乎在幕后使用了一些魔法来实现查询集的切片。
有没有办法实现类似的目标?是否可以以某种方式使用石墨烯使用的切片逻辑?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)