Django REST序列化程序:创建对象而不保存

时间:2016-05-14 22:13:04

标签: python django django-rest-framework

我已经开始使用Django REST框架了。我想要做的是用一些JSON POST一个请求,从中创建一个Django Model对象,并使用该对象而不保存它。我的Django模型叫做SearchRequest。我所拥有的是:

@api_view(['POST'])
def post_calculation(request):
    if request.method == 'POST':
        #JSON to serializer object
        serializer = SearchRequestSerializer(data=request.data)
        if (serializer.is_valid() == False):
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        mySearchRequestObject = serializer.save()

这会创建一个SearchRequest对象,但会立即将其保存到数据库中。我需要它而不保存。

2 个答案:

答案 0 :(得分:7)

将此方法添加到SearchRequestSerializer

def create(self):
    return SearchRequest(**self.validated_data)

并在功能post_calculation而不是save中调用它,如下所示:

mySearchRequestObject = serializer.create()

答案 1 :(得分:1)

如果您在视图中直接使用Generic View或使用mixins.CreateModelMixin,您可能会发现自己需要访问{{1}中的对象} 方法。您可以使用Moses Koledoye的想法创建对象而不保存:

perform_create

这反对在此def perform_create(self, serializer): # Create an instance WITHOUT saving instance = self.model(**serializer.validated_data) # ... do more stuff with the instance # ... # THEN, if you need to save the instance later instance.save() 方法中使用行instance = serializer.save(),它允许您访问实例但需要您保存它,这可能是一些不好的方法,例如

  • 您需要先访问模型的方法才能创建实例
  • 您需要存在实例才能访问以操纵其部分数据,因此您必须将其保存两次