首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django rest框架中的批量插入

django rest框架中的批量插入
EN

Stack Overflow用户
提问于 2020-02-06 03:38:11
回答 1查看 194关注 0票数 0

当我试图在单个请求中创建多个实例时,如果批处理中有一个实例不正确,它就会显示错误。但是,我如何编写我的create方法来在批处理中插入正确的实例呢?这意味着只有正确的实例才会插入到数据库中,并且还会显示错误实例的错误消息。

代码语言:javascript
运行
复制
[
    {
        "name": "oil",
        "unit_price": 200
    },
    {
        "name": "meat",
        "unit_type": "raw",
        "unit_price": 1000
    }
        "name": "salt",
        "unit_type": "raw",
        "unit_price": -100
    }

]

我想插入前两个实例将被插入到数据库中,对于最后一个实例,它将抛出如下所示的错误。

代码语言:javascript
运行
复制
    "errors":
 [

        {
            "unit_price": [
                "Enter positive number."
            ]
        }
 ]

这是我的序列化程序

代码语言:javascript
运行
复制
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']

另外,我的视图函数是

代码语言:javascript
运行
复制
@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})
EN

回答 1

Stack Overflow用户

发布于 2020-02-06 04:00:26

由于您使用的是一个ProductSerializer实例,因此如果is_valid返回False,您将无法保存。如果要创建所有有效的数据集并返回出错的数据集,则可能需要考虑为每个条目创建一个序列化程序实例,并跟踪返回的数据。您可以通过这种方式为用户构建响应值列表,因此允许部分失败。

我的建议不会使这个操作成为“批量”操作,但从技术上讲,它不适用于many=Truemany=True只是用一个ListSerializer包装了你的序列化程序,它只是使用包装的每个属性的序列化程序来调用create。因此,您按原样对每个数据实例执行一个save()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60082960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档