繁体   English   中英

Graphene-Django Relay 基于光标的分页不适用于动态数据

[英]Graphene-Django Relay Cursor Based Pagination Does Not Work for Dynamic Data

我正在使用 Graphene-Django Relay 规范获取动态数据。

import graphene
from graphene_django.types import DjangoObjectType
from graphene_django.fields import DjangoConnectionField

from . import models


class PostType(DjangoObjectType):
    class Meta:
        model = models.Post
        interfaces = (graphene.Node, )

class Query(graphene.ObjectType):
    post = graphene.Field(PostType)
    posts = DjangoConnectionField(PostType)

def resolve_posts(self, info, **kwargs):
    return models.Post.objects.order_by('-score', '-id')

当我在获取游标和数据后添加新帖子时,游标会发生变化。 换句话说,指向数据确切偏移量的光标不再指向该数据。 它指向一个新的、不同的数据。 因此,我无法使用以下方法实现基于光标的分页:

query fetchPosts ($cursor) {
    posts(first: 20, after: $cursor)...
}

因为游标随着数据的变化而变化,它与传统的基于偏移量的分页没有什么不同。 有什么我想念的吗? 我想要的光标不是改变。 喜欢这篇文章:

https://www.sitepoint.com/paginating-real-time-data-cursor-based-pagination/

我应该如何使光标指向动态变化的相同数据?

不幸的是,我认为这种行为是意料之中的。 Relay 的策略比传统的偏移分页更灵活,但也有同样的局限性。

如果您的基础数据发生更改,则表示它的分页也需要更改。

如果您想避免这种情况,您可以考虑以不同的方式对基础数据进行排序,这样新记录就不会改变您的分页。 例如,如果您按创建时间对帖子进行排序,则新帖子将添加到列表末尾,并且您之前的所有分页仍然有效。

很奇怪,graphene_django 开发人员称它为光标分页,但它不像光标那样工作,而是像偏移量。 当我尝试按时间切割排序数组中的数据时,我也遇到了这个问题。 将字段添加到第一个位置时,所有光标都会移动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM