Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Rest框架中的批量更新数据_Python_Django_Python 3.x_Django Rest Framework - Fatal编程技术网

Python Django Rest框架中的批量更新数据

Python Django Rest框架中的批量更新数据,python,django,python-3.x,django-rest-framework,Python,Django,Python 3.x,Django Rest Framework,我正在通过Django Rest框架创建一个通知应用程序,用户可以使用前端的补丁API将其标记为“读取所有通知”。如何批量更新数据才能完成此任务 下面的序列化程序和视图集仅用于修补一个通知对象,但我想对具有字段is_read=False 用正确的方法编辑 我的序列化程序: class NotificationEditSerializer(ModelSerializer): class Meta: model = Notification fields =

我正在通过Django Rest框架创建一个通知应用程序,用户可以使用前端的补丁API将其标记为“读取所有通知”。如何批量更新数据才能完成此任务

下面的序列化程序和视图集仅用于修补一个通知对象,但我想对具有字段
is_read=False

用正确的方法编辑

我的序列化程序:

class NotificationEditSerializer(ModelSerializer):
    class Meta:
        model = Notification
        fields = (
            'id',
            'is_read'
        )
我的视图集:

from rest_framework.response import Response
class NotificationListAPIView(ReadOnlyModelViewSet):
    queryset = Notification.objects.all()
    permission_classes = [AllowAny]
    serializer_class = NotificationEditSerializer
    lookup_field = 'id'

    @list_route(methods=['PATCH'])
    def read_all(self, request):
        qs = Notification.objects.filter(is_read=False)
        qs.update(is_read=True)
        serializer = self.get_serializer(qs, many=True)
        return Response(serializer.data)
我的网址:

from rest_framework import routers
router.register(r'notifications/read_all', NotificationListAPIView)

您可以尝试使用
list\u route
例如:

from rest_framework.response import Response
from rest_framework.decorators import list_route

class NotificationListAPIView(ReadOnlyModelViewSet):
    #YOUR PARAMS HERE

    @list_route()
    def read_all(self, request):
        qs = Notification.objects.filter(is_read=False)
        qs.update(is_read=True)
        serializer = self.get_serializer(qs, many=True)
        return Response(serializer.data)

该api可通过
^YOUCURRENTURL/read\u all/$
获取更多详细信息

获得此错误:应使用名为“id”的URL关键字参数调用视图通知EditapiView。修复您的URL配置,或在视图上正确设置
.lookup\u字段
属性。这是我的新URL配置:URL(r'^read\u all/$,NotificationEditAPIView.as_view(),name='list'),您不需要更改URL配置,只需按照旧方法使用前缀列表(r'^(?P[0-9]+)/标记为'u read/$',NotificationEditAPIView.as_view(),name='list'))仅针对一个对象,但我想更新所有对象,Brown.why用于list
retrieveupdateaview
why(例如)not
ReadOnlyModelViewSet