Python Django REST框架阻止批创建中的多个验证查询

Python Django REST框架阻止批创建中的多个验证查询,python,django,django-rest-framework,Python,Django,Django Rest Framework,当尝试使用Django/Django Rest Framework 3进行批量插入时,验证步骤会导致n*相关的\u model\u字段查询,这会导致大量不必要的延迟 在下面的示例中,Thing有两个相关字段,一个是用户(添加到视图中),另一个是外键相关字段中另一个模型的pk。批处理中的每个项目都将单独进行验证,该验证包括对用户模型和其他相关模型的查找,从而在批处理中每个项目只进行2次查询以进行验证 是否有任何方法可以覆盖此行为以对数据进行“批量”验证?或者我是否可以覆盖验证行为,根据预先查询的一

当尝试使用Django/Django Rest Framework 3进行批量插入时,验证步骤会导致
n*相关的\u model\u字段
查询,这会导致大量不必要的延迟

在下面的示例中,
Thing
有两个相关字段,一个是用户(添加到视图中),另一个是外键相关字段中另一个模型的
pk
。批处理中的每个项目都将单独进行验证,该验证包括对
用户
模型和其他相关模型的查找,从而在批处理中每个项目只进行2次查询以进行验证

是否有任何方法可以覆盖此行为以对数据进行“批量”验证?或者我是否可以覆盖验证行为,根据预先查询的一组值进行验证,以防止多次数据库往返

class ThingView(APIView):
    def post(self, request):
        # Add user to each record
        user_id = self.request.user.id
        map(lambda rec: rec.update(user=user_id), request.data)

        serializer = ThingSerializer(data=request.data, many=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

class ThingListSerializer(serializers.ListSerializer):
    def create(self, validated_data):
        things = [Thing(**item) for item in validated_data]
        return Thing.objects.bulk_create(things)

class ThingSerializer(serializers.ModelSerializer):
    class Meta:
        model = Thing
        list_serializer_class = ThingListSerializer

您可能希望运行自己的验证器并替换默认的验证器。例如,在
用户
上,您将有一个UniqueValidator,它将查询数据库中现有的
用户名
。您可以删除它并自己显式地处理该约束—对于某些批导入,您可以这样做。

您可能希望使用自己的验证程序并替换默认的验证程序。例如,在
用户
上,您将有一个UniqueValidator,它将查询数据库中现有的
用户名
。您可以删除它并自己显式地处理该约束—对于某些批导入,您可以这样做。

发布您的对象模型?发布您的对象模型?