Python Django REST框架阻止批创建中的多个验证查询
当尝试使用Django/Django Rest Framework 3进行批量插入时,验证步骤会导致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次查询以进行验证 是否有任何方法可以覆盖此行为以对数据进行“批量”验证?或者我是否可以覆盖验证行为,根据预先查询的一
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,它将查询数据库中现有的用户名
。您可以删除它并自己显式地处理该约束—对于某些批导入,您可以这样做。发布您的对象模型?发布您的对象模型?