问题描述
我向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()