库
djangorestframework-bulk==0.2.1
类
from rest_framework_bulk import BulkSerializerMixin, BulkListSerializer
使用方法
class BaseSerializer(DynamicFieldsModelSerializer,BulkSerializerMixin):
class Meta:
model = model
list_serializer_class = BulkListSerializer
fields = '__all__'
BulkSerializerMixin
是需要被继承的,因为drf默认的序列化器的会过滤掉readonly字段,而id字段一般是readonly的,所以要重写这个方法来重新将id字段(或者其他你通过update_lookup_field属性设置的字段)加回数据.BulkListSerializer
主要实现了update方法:- 这样前端可以在put/patch方法的body中传入一个列表,列表中是所有更新过的数据.
- 列表中的每个对象都必须有id属性,如果有的对象没有,那么会抛出一个
ValidationError
- 列表中的每个对象id都必须是在数据库中已经存在的,如果有新的id进来,那么会抛出一个
Could not find all objects to update.
的ValidationError
.
- 注意这个方法在完成前面的校验之后,仍然是循环每个对象,单独调用update方法,来保证你写在序列化器中的更新逻辑全部会被调用到.相应的,与重写接口并调用queryset.update()方法相比,sql执行次数会大幅增加.