简体   繁体   English

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

[英]graphene-django add additional argument for DjangoFilterConnectionField and pass it to get_queryset

I have added an additional argument called user_type to disposal_request query, and I want to use this argument to add another filter but when I passed it to get_queryset function.我向disposal_request查询添加了一个名为user_type的附加参数,我想使用这个参数添加另一个过滤器,但是当我将它传递给get_queryset函数时。 I get the following error: get_queryset() missing 1 required positional argument: 'user_type' I'm not sure how to pass the argument properly.我收到以下错误: 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()
    )

I ended up putting the additional filter to resolve_ function and pass **kwargs for additional fields added by DjangoFilterConnectionField我最终将额外的过滤器放到了resolve_函数中,并为DjangoFilterConnectionField添加的额外字段传递了 **kwargs

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()

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

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