【问题标题】:Is it possible to return a list of Objects for a mutation in graphene?是否可以返回石墨烯突变的对象列表?
【发布时间】:2021-12-17 21:43:41
【问题描述】:

我创建了一个突变来处理文件中的数据。这些文件由一个名为 IncomingFile 的 django 模型表示。

最初我一次只使用他的 ID 获取一个 IncomingFile,但现在我认为获取 IncomingFile 的 ID 列表并处理它们可能会更好。

所以我以这种方式纠正我的突变:

class FileMutation:

    process_file = GpexeCustomField(
        Boolean,
        incomingfile_list_id=List(ID, required=True)
    )

    def resolve_process_file(self, info, incomingfile_list_id, **kwargs):
        try:
            ifile_list = []

            if not incomingfile_list_id:
                return False

            for id in incomingfile_list_id:
                ifile_list.append(IncomingFileType.objects(info, "write").get(id=id))

            for incomingfile in ifile_list:
                incomingfile.process()

        except Exception as e:
            logger.error(f"Error on request to process incoming files from {e}")
            return False

        return True

(GpexeCustomField 只是一个帮助调用正确解析方法的类)

对象类型:

class IncomingFileType(DjangoObjectType):
    class Meta:
        model = IncomingFile
        fields = "__all__"

效果很好!但现在我想返回 ifile_list(它包含已处理的 IncomingFile 对象)并在 graphql 控制台中显示它们的 ID。可能吗?如果是,如何?我应该更正或添加什么? 我不想要解决方案,而只想要一些让我有可能独自完成的概念。

提前致谢,抱歉英语不好!

【问题讨论】:

  • 你的变异类中有变异方法吗?您可能想要更新您的变异类返回的内容。
  • 好的,非常感谢!因此,如果我有一个名为“IncomingObjectType”的 ObjectType 类并且我希望我的变异返回一个 IncomingFileObjects 列表,我应该使用 List(IncomingFileObject) 更改布尔值。
  • 是的。例如查看docs.graphene-python.org/projects/django/en/latest/mutations,它返回一个 QuestionMutation 对象。
  • 非常感谢! :)

标签: python graphene-python graphene-django


【解决方案1】:

你可以有这样的东西:

class ProcessedFile(graphene.ObjectType):
    id = graphene.ID()
    is_processed = graphene.Boolean()

class FileMutation:
    processed_files = graphene.List(
        ProcessedFile,
        incomingfile_list_id=List(ID, required=True)
    )

    def resolve_process_file(self, info, incomingfile_list_id, **kwargs):
        try:
            ifile_list = []
            if not incomingfile_list_id:
                return False
            for id in incomingfile_list_id:
                ifile_list.append(IncomingFileType.objects(info, "write").get(id=id))
            results = []
            for incomingfile in ifile_list:
                is_processed = incomingfile.process()
                # I assume that id can be retrieved
                results.append(ProcessedFile(id=incomingfile.id, is_processed=is_processed))       
          
        except Exception as e:
            logger.error(f"Error on request to process incoming files from {e}")
            return []
        return results

或使用现有的IFileType

class FileMutation:
    processed_files = graphene.List(
        IFileType,
        incomingfile_list_id=List(ID, required=True)
    )

    def resolve_process_file(self, info, incomingfile_list_id, **kwargs):
        try:
            ifile_list = []
            if not incomingfile_list_id:
                return False
            for id in incomingfile_list_id:
                ifile_list.append(IncomingFileType.objects(info, "write").get(id=id))
            for incomingfile in ifile_list:
                incomingfile.process()      
        except Exception as e:
            logger.error(f"Error on request to process incoming files from {e}")
            return []
        return ifile_list

【讨论】:

    猜你喜欢
    • 2022-10-25
    • 2020-09-07
    • 2020-09-01
    • 2017-03-18
    • 2022-01-17
    • 2019-01-19
    • 2020-11-25
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多