【问题标题】:Django Rest Framework: Updating model with ImageField without updating the imageDjango Rest Framework:使用 ImageField 更新模型而不更新图像
【发布时间】:2014-02-21 21:11:06
【问题描述】:

使用 Django Rest Framework 我正在尝试使用图像字段更新模型。当我尝试更新模型上的其他字段时,我收到此错误:

{"image": ["No file was submitted. Check the encoding type on the form."]}

这是序列化程序的简单概念。它在 GET 调用中返回的图像字段只有文件名。

class ModelWithImageSerializer(serializers.ModelSerializer):
    image = serializers.ImageField('image', required=False)
    class Meta:
        model = models.Level
        fields = ('id','name', 'image')

如何在不重新提交文件的情况下更新我的模型?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    Django REST 允许提交部分PATCH 请求(docs)。只要确保使用自动允许这样做的UpdateAPIView(或它的变体)。部分更新的想法是它们不需要您提交将完成您需要的行为的所有模型字段。

    【讨论】:

    • 我在“设置”视图中使用它,该视图将更新可变数量的字段。我是否应该专注于创建一个在每个字段更改时构建 PATCH 数据的系统?我希望有一种方法可以让 DRF 在该图像场上对其进行冷却。
    • 不确定你在问什么。使用补丁时,您不必提交所有字段,这意味着您可以省略图像字段,Django 不会抱怨。当您向模型添加其他字段时,您可以对它们执行相同的操作...
    • 我本来可以更清楚,这是我的模型序列化程序的简化版本。它有许多可以通过表单更新的其他字段,因此它们中的任意数量都可能更改,包括图像字段。使用 PATCH,我必须构建一些东西来说明哪些字段已被修改。
    • 你能在哪里解决这个问题?我也有同样的问题。我正在做一个补丁,但它仍然抱怨[“没有提交文件。检查表单上的编码类型。”]。
    【解决方案2】:

    我在使用 FileField 时遇到了同样的问题。我不得不删除 PUT 请求上的 FileField 属性,这样它就不会覆盖存储的值。只需确保模型上的空白=真,使其成为可选字段。我正在使用 DRF 2.4.4。

    【讨论】:

      【解决方案3】:

      ImageField 设置为read_only 然后它会工作,但是当你有 post 方法时,它就不起作用了。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多