2013-08-22 10 views
6

Ich versuche, eine Bulk-Update-Ansicht für ein bestimmtes Modell mit Django Rest Framework zu erstellen. Kurzfristig muss nur ein Feld aktualisiert werden (indem eine Einladung von submitted = False auf submitted = True umgeschaltet wird), aber ich möchte, dass sie in der Zukunft mehr Funktionalität bereitstellen kann. Immer wenn ich die Ansicht teste, wird jedoch ein neues Objekt erstellt, anstatt dass das aktuelle Objekt geändert wird.Django Rest Framework Bulk-Updates Einfügen statt zu aktualisieren

Ich denke, das muss ein einfacher Fehler meinerseits sein, aber ich kann nicht herausfinden, was vor sich geht. Das Serialisierungsobjekt scheint den Wert für "ID" zu ignorieren, der über JSON übergeben wurde und möglicherweise zum Problem beiträgt. Aktueller Code ist:

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

Kann jemand etwas Licht auf das werfen, was ich möglicherweise falsch mache?

Antwort

4

Die offensichtliche Sache, die herauskommt, ist, dass Sie keine Objektinstanzen an Ihren Serializer übergeben. (So ​​wird es neue Instanzen erstellen, anstatt zu aktualisieren.) Siehe docs on dealing with multiple objects in serializers, wo Sie Ihre QuerySet in weitergegeben sehen werden.

+0

Sie hatten Recht; Das fehlende Teil setzte das Abfrage-Set. Ich bin mir nicht sicher, was ich von einem früheren Versuch geändert habe, aber vor meinem Post hatte ich versucht, einen Queryset zu übergeben und bekam einen Fehler, der sagte, dass serializer.save() kein Attribut war, also nahm ich an, dass es das Problem verursachte. Habe es funktioniert, danke! – user2708386

7

Nur falls jemand für eine Bibliothek suchen, dies zu umgehen, habe ich ein Django-REST-Framework-bulk, die erlaubt, zu tun das in ein paar Zeilen (das Beispiel nur Bulk-Update, aber die Bibliothek ermöglicht auch Bulk erstellen und löschen):

+9

Django-REST-Framework-Bulk scheint nicht länger gepflegt zu sein. – Joseph

Verwandte Themen