Django DRF bulk_update первичный ключ
Я использовал пример из документации для реализации массового обновления:
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
https://www.django-rest-framework.org/api-guide/serializers/#listserializer
Когда я пытаюсь использовать это и обновить строку, я получаю ошибку:
duplicate key value violates unique constraint \"api_book_pkey\"\nDETAIL: Key (id)=(7) already exists.\n"
Так что похоже, что он не пытается обновить, а создает новый с тем же id.
Но для меня это выглядит так, как будто он действительно вызывает child.update
.
Что здесь не так?