当我试图在单个请求中创建多个实例时,如果批处理中有一个实例不正确,它就会显示错误。但是,我如何编写我的create方法来在批处理中插入正确的实例呢?这意味着只有正确的实例才会插入到数据库中,并且还会显示错误实例的错误消息。
[
{
"name": "oil",
"unit_price": 200
},
{
"name": "meat",
"unit_type": "raw",
"unit_price": 1000
}
"name": "salt",
"unit_type": "raw",
"unit_price": -100
}
]
我想插入前两个实例将被插入到数据库中,对于最后一个实例,它将抛出如下所示的错误。
"errors":
[
{
"unit_price": [
"Enter positive number."
]
}
]
这是我的序列化程序
class ProductSerializer(serializers.ModelSerializer):
def validate_unit_price(self, value):
if (value) > 0:
return value
raise serializers.ValidationError("Enter positive number.")
class Meta:
model = Product
fields = [ 'name', 'unit_type', 'unit_price']
另外,我的视图函数是
@api_view(['POST'])
def store(request):
serializer = ProductSerializer(data = request.data,many=True)
if serializer.is_valid():
serializer.save()
return Response({'response_code': '500', 'response': status.HTTP_500_INTERNAL_SERVER_ERROR, 'message': 'Something went wrong', 'data': request.data, 'errors': serializer.errors})
发布于 2020-02-06 04:00:26
由于您使用的是一个ProductSerializer
实例,因此如果is_valid
返回False
,您将无法保存。如果要创建所有有效的数据集并返回出错的数据集,则可能需要考虑为每个条目创建一个序列化程序实例,并跟踪返回的数据。您可以通过这种方式为用户构建响应值列表,因此允许部分失败。
我的建议不会使这个操作成为“批量”操作,但从技术上讲,它不适用于many=True
。many=True
只是用一个ListSerializer
包装了你的序列化程序,它只是使用包装的每个属性的序列化程序来调用create
。因此,您按原样对每个数据实例执行一个save()
。
https://stackoverflow.com/questions/60082960
复制相似问题