что является аргументом экземпляра, переданным методу обновления в ListSerializer в документации по остальному django - PullRequest
0 голосов
/ 20 мая 2018

что такое аргумент экземпляра, передаваемый методу .update () в ListSerializer в документации по остальным django. ( ссылка на документацию ListSerializer ).

class BookListSerializer(serializers.ListSerializer):
    def update(self, instance, validated_data):
        # Maps for id->instance and id->data item.
        book_mapping = {book.id: book for book in instance}
        data_mapping = {item['id']: item for item in validated_data}

        # Perform creations and updates.
        ret = []
        for book_id, data in data_mapping.items():
            book = book_mapping.get(book_id, None)
            if book is None:
                ret.append(self.child.create(data))
            else:
                ret.append(self.child.update(book, data))

        # Perform deletions.
        for book_id, book in book_mapping.items():
            if book_id not in data_mapping:
                book.delete()

        return ret

class BookSerializer(serializers.Serializer):
    # We need to identify elements in the list using their primary key,
    # so use a writable field here, rather than the default which would be read-only.
    id = serializers.IntegerField()
    ...

    class Meta:
        list_serializer_class = BookListSerializer

1 Ответ

0 голосов
/ 20 мая 2018

Если вы проверите тестовые случаи для класса DRF ListSerializer, вы увидите, что предполагается передать список диктов:

Ref: https://github.com/encode/django-rest-framework/blob/f148e4e2593e55c76c746c85422924c33ec435cc/tests/test_serializer_lists.py#L390

...