2013-08-22 29 views
6

Tôi đang cố gắng xây dựng một chế độ xem cập nhật hàng loạt cho một mô hình cụ thể bằng cách sử dụng Django Rest Framework. Trong ngắn hạn, nó chỉ cần cập nhật một trường (chuyển đổi lời mời từ được gửi = False để gửi = True), nhưng tôi muốn nó có thể cung cấp thêm chức năng trong tương lai. Bất cứ khi nào tôi kiểm tra xem, tuy nhiên, một đối tượng mới đang được tạo ra thay vì hiện tại đang được sửa đổi.Django Rest Framework cập nhật số lượng lớn chèn thay vì cập nhật

Tôi cảm thấy như đây phải là một sai lầm đơn giản về phía tôi, nhưng tôi không thể tìm ra những gì đang xảy ra. Đối tượng serializer dường như bỏ qua giá trị cho "id" được truyền qua JSON, điều này có thể góp phần vào vấn đề. Mã hiện tại là:

class InviteBulkUpdateView(generics.UpdateAPIView): 
    def get_queryset(self): 
     order = self.kwargs['order'] 
     invite = get_objects_for_user(self.request.user, 'sourcing.view_invite') 
     return invite.filter(order=order) 

    serializer_class = InviteInputSerializer 

    def put(self, request, *args, **kwargs): 
     data = request.DATA 
     serializer = InviteInputSerializer(data=data, many=True) 

     if serializer.is_valid(): 
      serializer.save() 
      return Response(status=status.HTTP_200_OK) 
     else: 
      return Response(status=status.HTTP_400_BAD_REQUEST) 

class InviteInputSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Invite 
     fields = ('id', 'order', 'team', 'submitted') 

Ai có thể làm sáng tỏ những gì tôi có thể làm sai không?

Trả lời

4

Điều hiển nhiên bật ra là bạn không chuyển các cá thể đối tượng đến bộ nối tiếp của bạn. (Do đó, nó sẽ tạo ra các phiên bản mới thay vì cập nhật.) Xem docs on dealing with multiple objects in serializers nơi bạn sẽ thấy QuerySet của mình được thông qua.

+0

Bạn đã đúng; phần còn thiếu đã thiết lập queryset. Tôi không chắc những gì tôi đã thay đổi từ lần thử trước, nhưng trước khi đăng bài, tôi đã cố gắng chuyển qua một queryset và nhận được thông báo lỗi rằng serializer.save() không phải là thuộc tính, vì vậy tôi cho rằng nó đã gây ra vấn đề. Có nó làm việc, cảm ơn! – user2708386

7

Chỉ trong trường hợp ai đó đang tìm thư viện để xử lý việc này, tôi đã viết Django-REST-Framework-bulk. rằng trong một vài dòng (ví dụ chỉ cập nhật hàng loạt nhưng thư viện cũng cho phép tạo và xóa hàng loạt):

from rest_framework_bulk import ListCreateBulkUpdateAPIView 

class FooView(ListCreateBulkUpdateAPIView): 
    model = FooModel 
+9

Django-REST-Framework-bulk dường như không còn được duy trì nữa. – Joseph

Các vấn đề liên quan