2013-08-22 5 views
6

Я пытаюсь создать массовое представление обновления для конкретной модели с использованием Django Rest Framework. В краткосрочной перспективе необходимо обновить только одно поле (переключая приглашение от отправленного = False на отправленный = True), но я бы хотел, чтобы он мог обеспечить больше функциональности в будущем. Однако, когда я проверяю представление, создается новый объект вместо текущего, который изменяется.Django Rest Framework массовые обновления вставки вместо обновления

Я чувствую, что это должна быть простая ошибка с моей стороны, но я не могу понять, что происходит. Объект serializer, по-видимому, игнорирует значение «id», переданное через JSON, что может способствовать этому вопросу. Текущий код:

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

Очевидная вещь, которая появляется, заключается в том, что вы не передаете экземпляры объектов вашему сериализатору. (Таким образом, он будет создавать новые экземпляры, а не обновлять.) См. docs on dealing with multiple objects in serializers, где вы увидите свой QuerySet.

+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

Смежные вопросы