Я читаю о настройке нескольких обновлений здесь, и я не понял, в каком случае вызывается пользовательский метод обновления ListSerializer
, Я хотел бы обновить сразу несколько объектов, я не беспокоюсь о множественном создании или удалении на данный момент.
Из примера в документах:
# serializers.py
class BookListSerializer(serializers.ListSerializer):
def update(self, instance, validated_data):
# custom update logic
...
class BookSerializer(serializers.Serializer):
...
class Meta:
list_serializer_class = BookListSerializer
И мой ViewSet
# api.py
class BookViewSet(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
И моя настройка url с помощью DefaultRouter
# urls.py
router = routers.DefaultRouter()
router.register(r'Book', BookViewSet)
urlpatterns = patterns('',
url(r'^api/', include(router.urls)),
...
Итак, я настроил его с помощью DefaultRouter
, чтобы /api/Book/
использовал BookSerializer
.
Является ли общая идея, что если я POST/PUT/PATCH массив объектов JSON для /api/Book/
, то сериализатор должен переключиться на BookListSerializer
?
Я пробовал список данных POST/PUT/PATCH JSON для этого /api/Book/
, который выглядит так:
[ {id:1,title:thing1}, {id:2, title:thing2} ]
но он по-прежнему обрабатывает данные, используя BookSerializer
вместо BookListSerializer
. Если я отправлю через POST, я получаю Invalid data. Expected a dictionary, but got list
. и если я отправлю через PATCH или PUT, я получаю ошибку Method 'PATCH' not allowed
.
Вопрос:
Нужно ли настраивать allowed_methods
DefaultRouter
или BookViewSet
, чтобы разрешать POST/PATCH/PUT списков? Являются ли общие представления не настроены для работы с ListSerializer
?
Я знаю, что я мог бы написать свой собственный десериализатор списка для этого, но я стараюсь быть в курсе новых функций в DRF 3, и похоже, что это должно работать, но я просто пропускаю какое-то соглашение или какой-то вариант.