Python Django REST序列化程序:创建对象而不保存
我已经开始使用Django REST框架。我试图做的是用一些JSON发布一个请求,用它创建一个Django模型对象,然后使用这个对象而不保存它。我的Django模型称为SearchRequest。我得到的是: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
@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好日子实例化这个类一样