0

我目前正在从使用 DRF 切换到 django-graphene,同时将 boto3 和 s3 用于媒体内容。使用 DRF 时,文件字段将返回 s3 存储桶内媒体的完整路径。但是,graphene-django 文件字段仅返回相对路径。

例如,使用 DRF,文件字段会返回完整的 url,例如:

https://bucket.s3.amazonaws.com/logos/logos_2019-11-07_172356.1808000000.png

但是使用graphene-django,它又回来了:

/logos/logos_2019-11-07_172356.1808000000.png

是否需要添加中间件?还是我需要创建自己的缩放器来处理这个问题?一般来说,我对 graphene-django 和 graphql 很陌生。因此,非常感谢任何帮助。

4

2 回答 2

4

您可以添加自定义字段来构建完整的 URL,如下所示。

class FileType(DjangoObjectType):
    class Meta:
       model = FileModel

    storage_url = graphene.String()

   def resolve_storage_url(self, info):
       return f"https://bucket.s3.amazonaws.com/{self.url}"

storage_url然后从前端查询该字段。

于 2020-01-14T09:16:44.110 回答
0

正如 Ijharul Islam 提到的,您应该添加一个自定义字段,但是:要从不同的存储桶,甚至是私有对象(您需要一个密钥来访问文件)获取 url,我建议访问“url”里面的字段包含该文件的模型中的字段。

例如:这里我有一个自定义用户模型,在我的模型中有字段“photo_file”:

class UserType(DjangoObjectType):
    class Meta:
        model = get_user_model()
        only_fields = ('id', 'username', 'first_name',
                       'last_name', 'photo_file',)

    def resolve_photo_file(self, info):
        if self.photo_file and self.photo_file.url:
            return f"{self.photo_file.url}"

        else:
            return None
于 2022-02-15T23:02:10.253 回答