【发布时间】:2019-09-14 18:07:05
【问题描述】:
我正在尝试在Viewset 中使用ListSerializer 进行批量更新。我的批量创建工作正常,但不是 PUT。这是我的Serializer、ListSerizlier 和我的观点。
django=2.0.0
Serializer
class SampleListSerializer(serializers.ListSerializer):
pass
class SampleSerializer(serializers.ModelSerializer):
class Meta:
list_serializer_class = SampleListSerializer
model = Sample
fields = ['id', 'name', 'last_name' ]
这是我的ViewSet:
class SampleViewSet(viewsets.ModelViewSet):
serializer_class = SampleSerializer
queryset = Sample.objects.all()
def get_serializer(self, *args, **kwargs):
if "data" in kwargs:
data = kwargs["data"]
# check if many is required
if isinstance(data, list):
kwargs["many"] = True
return super(SampleViewSet, self).get_serializer(*args, **kwargs)
def put(self, request):
sorted(request.data, key=lambda o: o["id"])
instances = Sample.objects.filter(id__in=[o["id"] for o in request.data]).order_by("id")
try:
with transaction.atomic():
ss = SampleSerializer(data=request.data, instance=instances, many=True)
if ss.is_valid(raise_exception=True):
s = ss.save()
return Response(ss.data)
return Response(status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
print(f"In exception {e}")
return Response(status=status.HTTP_400_BAD_REQUEST)
def create(self, request, *args, **kwargs):
return super().create(request, *args, **kwargs)
我在ss.is_valid() 处得到'QuerySet' 对象没有属性'pk'。有人可以建议我的错误在哪里吗?或者怎么了?
【问题讨论】:
-
根据the docs,DRF 列表序列化程序不支持开箱即用的多个更新,但这些相同的文档描述了如何做到这一点。
标签: python django django-rest-framework django-views