2013-08-22 10 views
6

Próbuję utworzyć widok aktualizacji zbiorczej dla określonego modelu przy użyciu Django Rest Framework. W krótkim czasie wystarczy zaktualizować jedno pole (przełączając zaproszenie z przesłanego = Fałsz na przesłane = Prawda), ale chciałbym, aby było możliwe zapewnienie większej funkcjonalności w przyszłości. Ilekroć testuję widok, tworzony jest jednak nowy obiekt zamiast aktualnie modyfikowanego.Aktualizacje zbiorcze Django Rest Framework wstawiające zamiast aktualizowania

Czuję, że to musi być prosty błąd z mojej strony, ale nie mogę zrozumieć, co się dzieje. Obiekt serializera wydaje się ignorować wartość "id" przekazywaną przez JSON, co może przyczyniać się do problemu. Obecny kod to:

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

Czy ktoś może rzucić nieco światła na to, co robię źle?

Odpowiedz

4

Oczywistą rzeczą, która wyskakuje, jest to, że nie przekazujesz instancji obiektu do serializera. (W ten sposób tworzyć nowe instancje zamiast aktualizacji.) Patrz docs on dealing with multiple objects in serializers gdzie zobaczysz swoją QuerySet przekazany w.

+0

Miałeś rację; brakującym elementem było ustawienie zestawu zapytań. Nie jestem pewien, co zmieniłem z poprzedniej próby, ale przed moim posta próbowałem przekazać w queryset i dostałem błąd, twierdząc, że serializer.save() nie był atrybut, więc zakładałem, że spowodował problem. Rozumiem, dziękuję! – user2708386

7

wszelki wypadek ktoś poszukuje biblioteki do obsługi tego, napisałem Django-REST-Framework-bulk który pozwala zrobić w kilku linijkach (w przykładzie jest tylko aktualizacja zbiorcza, ale biblioteka umożliwia również zbiorcze tworzenie i usuwanie):

from rest_framework_bulk import ListCreateBulkUpdateAPIView 

class FooView(ListCreateBulkUpdateAPIView): 
    model = FooModel 
+9

Django-REST-Framework-bulk wydaje się nie być już utrzymywany. – Joseph

Powiązane problemy