0
Django Rest Framework提供了一个关于如何实现批量更新的例子。该示例显示更新方法处理更新,创建和销毁实例。 我不明白的是,新数据如何具有'id',因为我认为一旦对象被保存到数据库就会创建一个id/pk。根据我的理解,当新实例处于validated_data中时,第二行应该失败,因为它们没有id。批量更新/创建一个请求
的例子
class BookListSerializer(serializers.ListSerializer):
def update(self, instance, validated_data):
book_mapping = {book.id: book for book in instance}
data_mapping = {item['id']: item for item in validated_data} # --> shouldn't this fail if new items are 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
Link to the example in Django Rest Framework docs
创建id由数据库处理,而不是由Django处理。 只需要两个字就不太容易了。一个用于new_data_mapping,另一个用于现有的。这可以通过检查id属性来实现,如果它不存在,则该项目被添加到new_data_mapping。 您是否有链接了解如何实现您建议的算法类型的信息? – Helgi
“创建的id由数据库处理,而不是由Django处理”
Linovia