2013-08-22 8 views
6

Django Rest Framework kullanarak belirli bir model için toplu güncelleştirme görünümü oluşturmaya çalışıyorum. Kısa vadede, yalnızca bir alanı güncellemesi gerekiyor (bir davetiyeyi gönderilmekten = False - submit = True), ancak gelecekte daha fazla işlevsellik sunabilmeyi istiyorum. Ancak, görünümü test ettiğimde, değiştirilmekte olanın yerine yeni bir nesne oluşturuluyor. Bu benim açımdan basit bir hata olmalı gibiDjango Rest Framework toplu güncelleştirme güncelleştirmesi yerine güncelleştirme eklemek

Ben hissediyorum, ama neler olduğunu anlamaya olamaz. Serileştirici nesnesi, konuya katkıda bulunabilecek olan JSON üzerinden geçirilen "id" için değeri göz ardı ediyor gibi görünüyor. Mevcut kod şudur:

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

Yanlış yaptığım şey hakkında biraz ışık tutabilir mi?

cevap

4

Ortaya çıkan bariz şey, seri hale getiricinize nesne örnekleri aktarmamanızdır. (Böylece oldukça güncelleme daha yeni örneklerini oluşturur.) Eğer QuerySet geçirilen görürsünüz docs on dealing with multiple objects in serializers bakın. Ne olur ne olmaz biri bu işlemek için bir kütüphaneye arıyor

+0

Sen haklıydın; eksik olan parça queryset'i kuruyordu. Bir önceki denemeden ne değiştiğimi bilmiyorum, ama yazmadan önce bir sorgulamada geçmeyi denedim ve serializer.save() öğesinin bir öznitelik olmadığını söyleyen bir hata aldım, bu yüzden bu sorunun neden olduğunu düşündüm. Çalıştı, teşekkürler! – user2708386

7

, yapacak sağlayan bir Django-REST-Framework-bulk yazdı çizgilerin bir çift (örneğin yalnızca toplu güncelleme yapar ama kütüphane de toplu oluşturmak ve silmek sağlar) o:

from rest_framework_bulk import ListCreateBulkUpdateAPIView 

class FooView(ListCreateBulkUpdateAPIView): 
    model = FooModel 
+9

Django-REST-Framework-bulk artık korunmayacak gibi görünüyor. – Joseph