Django storage S3-使用ModelSerializer仅保存文件路径而不保存文件

Django storage S3-使用ModelSerializer仅保存文件路径而不保存文件,django,django-models,django-rest-framework,django-serializer,django-file-upload,Django,Django Models,Django Rest Framework,Django Serializer,Django File Upload,我使用boto3将文件上传到S3,并将其路径保存在文件字段中 class SomeFile(models.Model): file = models.FileField(upload_to='some_folder', max_length=400, blank=True, null=True) 对于上述模型,以下代码用于创建记录 ff = SomeFile(file='file path in S3') ff.full_clean() ff.save() 现在,当我使用ModelS

我使用boto3将文件上传到S3,并将其路径保存在文件字段中

class SomeFile(models.Model):
    file = models.FileField(upload_to='some_folder', max_length=400, blank=True, null=True)
对于上述模型,以下代码用于创建记录

ff = SomeFile(file='file path in S3')
ff.full_clean()
ff.save()
现在,当我使用ModelSerializer做同样的事情时

class SomeFileSerializer(serializers.ModelSerializer):
    class Meta:
        model = SomeFile
        fields = ('file')
在运行下面的代码后,我得到了这个错误

rest_framework.exceptions.ValidationError:{'file':[ErrorDetail(string='提交的数据不是文件。请检查表单上的编码类型。',code='invalid')]}


我需要帮助设置序列化程序以接受文件路径,而不实际拥有文件

为什么不直接使用
urlfield
?使用AWS处理程序功能保存文件,响应将是签名url,您可以将其保存在
urlfield
我是Django新手。我不想存储完整的URL,只想存储相对路径。我还认为使用FileField可以帮助我减少更少的代码,并且所有使用boto3的文章都使用FileField。此外,如果我们改为某种内部部署,其中图像可以存储在本地,那么使用文件字段有助于重写某些内容这是否回答了您的问题@奥勒格鲁斯金,我已经看过了。在使用序列化程序读取数据时,它实际上很有用,但我不确定序列化程序在写入记录时如何知道该做什么。您可以使用不同的序列化程序进行读取和写入。对于读取,使用URLField或MethodField以url响应;对于写入,使用write-FileField。此外,上传文件可能是完全独立的操作/视图。或者它可以接受url并从提供的url下载文件,验证,保存到S3。。。
serializer = SomeFileSerializer(data={'file': 'file path to S3'})
serializer.is_valid(raise_exception=True)