【问题标题】:Many to many PATCH not immediately showing up in response Django REST Framework 2.4.3多对多 PATCH 没有立即响应 Django REST Framework 2.4.3
【发布时间】:2015-03-05 00:51:41
【问题描述】:

似乎在具有many-to-many 关系的端点上执行PATCH 会更新对象,但直到下一个响应才返回更新的数据,而不是在PATCH 响应中返回它。

原始对象示例:

{ “身份证”:35, “兴趣”:[ 1、 2 ], "personal_statement": "Hello World", “照片”: ””, “恢复”: ””, “用户”:2 }

PATCH 请求设置interests=[1,2,3,4,5] ... 示例响应:

{ “身份证”:35, “兴趣”:[ 1、 2 ], "personal_statement": "Hello World", “照片”: ””, “恢复”: ””, “用户”:2 }

下一个GET 响应示例:

{ “身份证”:35, “兴趣”:[ 1、 2、 3、 4、 5 ], "personal_statement": "Hello World", “照片”: ””, “恢复”: ””, “用户”:2 }

这是使用 Django v1.7.4 和 Django REST Framework v2.4.3

我的第一个假设是,由于它是多对多关系,它首先保存父对象并在保存多对多关系数据之前返回该数据,但我并不完全确定。任何帮助,将不胜感激。谢谢。

编辑

这个问题实际上是 Django REST Framework 上的一个开放问题,有一些可能的解决方案。这是由我的 ViewSet 查询集中的prefetch_related 引起的: https://github.com/tomchristie/django-rest-framework/issues/1556 https://github.com/tomchristie/django-rest-framework/issues/2442

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    根据 REST API 模式,PATCH 请求执行部分更新,因此Django-Rest-Framework 只返回更新后的数据。

    您可能想要覆盖 PATCH view 以返回完整的序列化程序数据,或者将您的 PATCH 请求更改为 PUT 之一。

    【讨论】:

      【解决方案2】:

      我在将 prefetch_related 添加到我拥有的多对多字段时遇到了同样的问题。我通过简单地向我的序列化程序添加自定义更新来解决它:

      def update(self, instance, validated_data):
          super(SimpleClientModelResource, self).update(instance, validated_data)
          return self.Meta.model.objects.get(id=instance.id)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-30
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 2018-07-28
        相关资源
        最近更新 更多