来自 DRF 序列化程序的 GraphQL 响应错误消息

Posted

技术标签:

【中文标题】来自 DRF 序列化程序的 GraphQL 响应错误消息【英文标题】:GraphQL response error message from DRF serializer 【发布时间】:2020-03-18 17:37:20 【问题描述】:

我可以使用 Django 作为后端在 GraphQL 中创建 CRUD。我的Mutation 是基于DRF 序列化程序的元类。

我使用术语 DRF, GraphQL, serializer, ... etc 进行了搜索。大多数将是与制作端点相关的主题,但它没有详细说明response 错误消息。大多数时候我发现 DRF 没有 GraphQL 答案

class Question(models.Model):
    question_text = models.CharField(max_length=50)

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        fields = (
            'id',
            'question_text',
        )

class QuestionSerializerMutation(SerializerMutation):

    class Meta:
        serializer_class = QuestionSerializer
        model_operation = ['crated', 'update']
        lookup_field = 'id'


class Mutation(graphene.ObjectType):
    xxx = QuestionSerializerMutation.Field()

身体

mutation
  xxx(input: questionText: "a;lsfjkdsajfdsjf;sjfsajdfkd;lsafjl;asfdsjf;lajflsadjf;alsjf;lasfsj")
    id
    questionText
  

预期结果:

GraphQL 从 Serializer 返回错误消息,因为我的有效负载超过 50 个字符

原样:

没有错误消息引发


  "data": 
    "xxx": 
      "id": null,
      "questionText": null
    
  

问题: 在 GraphQL 中如何使用 serializer.error 响应?

【问题讨论】:

【参考方案1】:

您应该查询具有fieldmessageserrors

mutation
 xxx(input: questionText: "a;lsfjkdsajfdsjf;sjfsajdfkd;lsafjl;asfdsjf;lajflsadjf;alsjf;lasfsj")
   id
   questionText
   errors 
      field
      messages
  
 

我实际上在这里写了一个 CRUD django-graphene rest 序列化程序库,也可以查看示例:https://github.com/topletal/django-model-mutations,我相信原始序列化程序突变工作类似

【讨论】:

以上是关于来自 DRF 序列化程序的 GraphQL 响应错误消息的主要内容,如果未能解决你的问题,请参考以下文章

drf框架 ----- 接口 cbv生命周期 请求解析响应组件 序列化组件 三大认证 其他组件

没有模型 APIView 的 DRF 分页自定义响应

DRF视图-请求与响应

drf序列化器之请求响应以及视图

drf 解析模块 异常模块 响应模块 序列化组件

drf入门规范序列化器组件视图组件请求与响应