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

Python Django REST序列化程序:创建对象而不保存,python,django,django-rest-framework,Python,Django,Django Rest Framework,我已经开始使用Django REST框架。我试图做的是用一些JSON发布一个请求,用它创建一个Django模型对象,然后使用这个对象而不保存它。我的Django模型称为SearchRequest。我得到的是: @api_view(['POST']) def post_calculation(request): if request.method == 'POST': #JSON to serializer object serializer = Searc

我已经开始使用Django REST框架。我试图做的是用一些JSON发布一个请求,用它创建一个Django模型对象,然后使用这个对象而不保存它。我的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对象,但是会立即将其保存到数据库中。我需要它而不保存。

将此方法添加到您的
SearchRequestSerializer
类中

def create(self):
    return SearchRequest(**self.validated_data)
并在函数
post_calculation
中调用它,而不是
save
,如下所示:

mySearchRequestObject = serializer.create()
如果在视图中直接使用或使用
mixin.CreateModelMixin
,您可能会发现自己处于需要在
perform\u create
方法中访问对象的情况。您可以使用Moses Koledoye的想法创建对象,而无需保存:

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() 
这与此
perform\u create
方法中的行
instance=serializer.save()
相反,该方法允许您访问实例,但要求您保存它,这可能是不好的,例如

  • 在创建实例之前,您需要访问模型的方法
  • 您需要实例存在才能访问它来操作它的一些数据,因此您必须保存它两次

您的代码是否显示您调用了
save()
?也许我错了最后一行:serializer.save()谢谢!你能解释一下吗?我只能让它与serializer一起工作。创建(serializer.validated_data)好的,我现在就知道了。我所做的是更改为返回SearchRequest(**self.validated_data),它解压缩您的验证数据,并使用生成的关键字参数实例化
SearchRequest
类。就像你在django好日子实例化这个类一样