【问题标题】:How to determine PATCH request inside method Update DRF serializer如何在方法更新 DRF 序列化程序中确定 PATCH 请求
【发布时间】:2020-03-29 02:28:31
【问题描述】:

或者什么是这个任务的最佳解决方案?

class MyViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    )
    serializer_class = MyViewSerializer
    pagination_class = LimitOffsetPagination
def update(self, instance, validated_data):
    instance.email = validated_data.get('email', instance.email)
    instance.content = validated_data.get('content', instance.content)
    instance.created = validated_data.get('created', instance.created)
    return instance

【问题讨论】:

    标签: python rest api serialization django-rest-framework


    【解决方案1】:

    最简单的方法是在序列化程序上下文中发送方法并在update 方法中获取它。

    serialized = YourSerializer(obj, request.data, context={'method': request.method}
    

    在你的更新函数中

    def update(self, instance, validated_data):
        method = self.context.get('method')
        # your rest of the update method
    

    或者

    如果您不从视图向序列化程序发送上下文,默认情况下请求对象是在上下文中发送的。你也可以从那里得到它。

    def update(self, instance, validated_data):
        method = self.context.get('request').method
        # your rest of the update method
    

    【讨论】:

    • 没有method
    • 你在说哪个methodrequest.method?还是 method 在更新方法中?
    • method = self.context.get('method') 返回None。只有``` {'request': , 'format': None, 'view': }```
    • 您必须从您的视图中发送。正如我在回答中提到的。 serialized = YourSerializer(obj, request.data, context={'method': request.method}
    • 谢谢!我在上面添加了我的视图。我应该在哪里将context={'method': request.method} 传递给序列化器?
    【解决方案2】:

    希望这个链接有用WritableNestedModelSerializer

    【讨论】:

      猜你喜欢
      • 2016-11-05
      • 1970-01-01
      • 2021-06-13
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-25
      • 2019-07-23
      相关资源
      最近更新 更多