简体   繁体   English

graphene-django 返回错误的过滤数据

[英]graphene-django returns wrong filtered data

I have a DjangoObjectType and a Filterset class for my query.我有一个 DjangoObjectType 和一个 Filterset class 用于我的查询。 I have added a filter for my DjangoObjectType class as below.我已经为我的 DjangoObjectType class 添加了一个过滤器,如下所示。

class MyFilter(FilterSet):
    quantity = NumberFilter(method='filter_quantity')

    def filter_quantity(self, queryset, name, value):
        a_data = ClassA.objects.filter(quantity__gte=value)
        a_data_keys = [data.key_number for data in a_data]
        return queryset.filter(key__in=a_data_keys)

When I run my query without any filter, it works correctly and returns all the data.当我在没有任何过滤器的情况下运行查询时,它可以正常工作并返回所有数据。 However, when I run it eg with the quantity: 1 filter, it returns data with just quantity: 1 , same as for 2. It doesn't return equal or greater .但是,当我使用quantity: 1过滤器运行它时,它返回的数据只有quantity: 1 ,与 2 相同。它不返回equal or greater I have some data with quantity: 3 .我有一些数据, quantity: 3 When I run the query with this filter and 3, it returns just quantity: 4 .当我使用此过滤器和 3 运行查询时,它只返回quantity: 4 I'm really confused what's wrong with this.我真的很困惑这有什么问题。 When I print the query filter result before return, it seems correct.当我在返回前打印查询过滤器结果时,它似乎是正确的。 But in the graphql query result dict, it's wrong.但是在graphql查询结果dict中,是错误的。 Do you have any idea about how can I fix this weird issue?你知道我该如何解决这个奇怪的问题吗?

It's hard to say because this is a limited snippet of the code involved, and this doesn't look wrong.很难说,因为这是所涉及代码的有限片段,而且看起来没有错。 Could it be possible that this filter is not being applied by graphene?有没有可能这个过滤器没有被石墨烯应用? are you using a DjangoFilterConnection field?你在使用DjangoFilterConnection字段吗? Maybe you need a resolve method as follows?也许您需要如下的解决方法?

class Query(graphene.ObjectType):
    filtered_stuff = DjangoFilterConnectionField(StuffType)

    def resolve_filtered_stuff(self, info, **filters):
        return MyFilter(filters).qs

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

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