如何在单个帖子中更新多个实例 - django rest 框架

Posted

技术标签:

【中文标题】如何在单个帖子中更新多个实例 - django rest 框架【英文标题】:how to update in a single post multiple instances - django rest framework 【发布时间】:2018-09-15 22:22:15 【问题描述】:

我有数组对象:

const ordsend =[
    
      order: 4,
      id: 1,
    ,
    
      order: 2,
      id: 2,
    
]

其中 id 是主键, 对于 axios,我通过 POST 方法发送这个:

this.axios.post('route-dispatchs/order/', this.ordsend)
   .then((response) => 
     console.log(success);
);

这对我来说似乎是正确的,因为通过 id 进行过滤并更新其各自的 order

class RouteDispatchViewSet(viewsets.ModelViewSet):
    queryset = RouteDispatch.objects.all()
    serializer_class = RouteDispatchSerializer

    @list_route(methods=['post'], url_path='order')
def order_dispatch(self, request):
    for data in request.data:
        self.queryset.filter(id=data['id']).update(order=data['order'])

    page = self.paginate_queryset(self.queryset)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)
    serializer = self.get_serializer(self.queryset, many=True)
    return Response(serializer.data)

但不幸的是它显示了以下错误:

AttributeError: 'list' 对象没有属性 'items'

如何在一个请求中进行多次更新?

错误:

当我只发送一个时:

this.ordsend[0]

我完美地删除了 ** for ** 更新。

【问题讨论】:

我在这篇文章中描述了一个替代方案:***.com/a/59756993/7392069 【参考方案1】:

假设您有如下请求负载,

'payload' :[
    
        "order": 4,
        "id": 1,
    ,
    
        "order": 2,
        "id": 2,
    
]

然后尝试如下更改您的views

class RouteDispatchViewSet(viewsets.ModelViewSet):
    queryset = RouteDispatch.objects.all()
    serializer_class = RouteDispatchSerializer

    @list_route(methods=['post'], url_path='order')
    def order_dispatch(self, request):
        for data in request.data['payload']:
            self.queryset.filter(id=data['id']).update(order=data['order'])

        page = self.paginate_queryset(self.queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(self.queryset, many=True)
        return Response(serializer.data)

参考:Queryset update django

【讨论】:

非常感谢,但它不起作用......它向我显示以下错误:AttributeError: 'list' object has no attribute 'items' 更新问题你的建议

以上是关于如何在单个帖子中更新多个实例 - django rest 框架的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 django 模型实例的多个字段?

如何更新 django 模型实例的多个字段?

Django 循环返回多个帖子

Django 表单:查询结果定义的字段,单个视图同时更新多个对象

单个 Django 模型,多个表?

最佳实践:单个 Amazon EC2 实例上的多个 django 应用程序