我如何检索 django-graphql-auth 和 graphene-django 的用户列表?

问题描述

使用

django==3.1.5
graphene-django==2.15.0
django-graphql-auth==0.3.15
django-graphql-jwt==0.3.0

我正在尝试允许在我的 GraphQL API 中将外键从模型设置为用户

class WorkOrder(BaseModel,models.Model):
    service_technician = models.ForeignKey(
        settings.AUTH_USER_MODEL,on_delete=models.PROTECT,related_name='service_technician',null=True
    )

尝试查询用户列表时,我得到了预期的响应。

query getUsers {
  users {
    edges {
      node {
        username,archived,verified,email,secondaryEmail,}
    }
  }
}

但是,在尝试查询所有工单时,出现错误

{
  "errors": [
    {
      "message": "Cannot query field \"serviceTechnician\" on type \"WorkOrderType\".","locations": [
        {
          "line": 35,"column": 5
        }
      ]
    }
  ]
}

这是我当前在 schema.py 中输入的工单和用户

class UserInput(graphene.InputObjectType):
    id = graphene.ID()
    username = graphene.String()
    email = graphene.String()
    password1 = graphene.String()
    password2 = graphene.String()

class WorkOrderInput(graphene.InputObjectType):
    id = graphene.ID()
    service_technician = graphene.List(UserInput)

我的 UserType 定义继承自 graphql_auth\schema.py 中的 UserNode

class UserType(UserNode):
    class Meta:
        model = get_user_model()
        filter_fields = app_settings.USER_NODE_FILTER_FIELDS
        exclude = app_settings.USER_NODE_EXCLUDE_FIELDS
        interfaces = (graphene.relay.Node,)
        skip_registry = True

    pk = graphene.Int()
    archived = graphene.Boolean()
    verified = graphene.Boolean()
    secondary_email = graphene.String()

最后,我的 CreateWorkOrder 突变

class CreateWorkOrder(graphene.Mutation):
    class Arguments:
        input = WorkOrderInput(required = True)
    
    ok = graphene.Boolean()
    workorder = graphene.Field(WorkOrderType)

    @staticmethod
    def mutate(root,info,input=None):
        ok = True

        resolved = resolve_or_create(technician=input.service_technician)
        #  resolve_or_create returns the resolved object,a newly created object,or None
        tech = resolved['technician']

        workorder = WorkOrder.objects.create(
            service_technician = tech,)
        return CreateWorkOrder(ok=ok,workorder=workorder)

我的 resolve_workorders 查询只返回 WorkOrder.objects.all()

总的来说,我对 graphQL 很陌生,所以如果有更多信息或明显的修复,我会很高兴知道您是如何得出这个结论的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)