2013-08-22 24 views
6

Django Rest Frameworkを使用して特定のモデルの一括更新ビューを構築しようとしています。短期的には、1つのフィールド(submit = Falseからsubmitted = Trueへの招待をトグルする)を更新するだけで済みますが、将来的にはより多くの機能を提供できるようにしたいと考えています。ただし、ビューをテストするたびに、現在のオブジェクトが変更される代わりに、新しいオブジェクトが作成されています。Django Rest Framework一括更新更新の代わりに挿入

私はこれが私の部分で単純な間違いでなければならないと感じますが、何が起こっているのか理解できません。シリアライザオブジェクトは、JSONを介して渡された "id"の値を無視しているように見えますが、これは問題の原因となっている可能性があります。現在のコードは

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') 

誰かが私が間違っているかもしれないことにいくつかの光を当てはめることができますか?

答えて

4

明白なことは、オブジェクトインスタンスをシリアライザに渡していないことです。 (したがって、更新ではなく新しいインスタンスが作成されます)。

+0

あなたは正しいと思います。欠けていた部分はクエリーセットを設定していた。以前の試みから何が変わったのか分かりませんが、私の投稿の前に私はクエリーセットを渡そうとしていましたが、serializer.save()は属性ではないというエラーが出ていました。ありがとう! – user2708386

7

誰かがこれを処理するライブラリを探している場合は、Django-REST-Framework-bulk (例では一括更新のみですが、ライブラリでも一括作成と削除が可能です)。

from rest_framework_bulk import ListCreateBulkUpdateAPIView 

class FooView(ListCreateBulkUpdateAPIView): 
    model = FooModel 
+9

Django-REST-Framework-bulkはもはや維持されないように見えます。 – Joseph

関連する問題