微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

graphene-django为DjangoFilterConnectionField添加附加参数,并将其传递给get_queryset

如何解决graphene-django为DjangoFilterConnectionField添加附加参数,并将其传递给get_queryset

我向user_type查询添加一个名为disposal_request的附加参数,我想使用该参数添加一个过滤器,但是当我将其传递给get_queryset函数时。我收到以下错误get_queryset() missing 1 required positional argument: 'user_type'我不确定如何正确传递参数。

import graphene
import graphene_django
from app.disposer.models import disposalRequest
from graphene_django.filter import DjangoFilterConnectionField
from graphql_jwt.decorators import login_required


class UserType(graphene.Enum):
    as_collector = "as_collector"
    as_disposer = "as_disposer"


class disposalRequestsType(graphene_django.DjangoObjectType):
    latitude = graphene.String()
    longitude = graphene.String()

    class Meta:
        model = disposalRequest
        exclude = ("location",)
        filter_fields = [
            "uuid","disposal_status",]

        interfaces = (graphene.Node,)
        convert_choices_to_enum = False

    @classmethod
    @login_required
    def get_queryset(cls,queryset,info,user_type):
        user = info.context.user
        if user_type == UserType.as_collector:
            print("as_collector")
            return queryset.filter(collector=user)
        elif user_type == UserType.as_disposer:
            print("as_disposer")
            return queryset.filter(disposer=user)

   def resolve_latitude(self,_):
        return self.location.x

    def resolve_longitude(self,_):
        return self.location.y

class disposalQueries(graphene.ObjectType):
    disposal_requests = DjangoFilterConnectionField(
        disposalRequestsType,user_type=UserType()
    )

解决方法

我最终将附加过滤器放到resolve_函数中,并为** kwargs传递了DjangoFilterConnectionField添加的其他字段

import graphene
import graphene_django
from app.disposer.models import DisposalRequest
from graphene_django.filter import DjangoFilterConnectionField
from graphql_jwt.decorators import login_required


class UserType(graphene.Enum):
    as_collector = "as_collector"
    as_disposer = "as_disposer"


class DisposalRequestsType(graphene_django.DjangoObjectType):
    latitude = graphene.String()
    longitude = graphene.String()

    class Meta:
        model = DisposalRequest
        exclude = ("location",)
        filter_fields = [
            "uuid","disposal_status",]

        interfaces = (graphene.Node,)
        convert_choices_to_enum = False

    def resolve_latitude(self,_):
        return self.location.x

    def resolve_longitude(self,_):
        return self.location.y


class DisposalQueries(graphene.ObjectType):
    disposal_requests = DjangoFilterConnectionField(
        DisposalRequestsType,user_type=UserType()
    )

    @staticmethod
    @login_required
    def resolve_disposal_requests(_,info,user_type,**__):
        user = info.context.user
        if user_type == UserType.as_collector:
            return DisposalRequest.objects.filter(collector=user).all()
        elif user_type == UserType.as_disposer:
            return DisposalRequest.objects.filter(disposer=user).all()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。