我已经开始使用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对象,但会立即将其保存到数据库中。我需要它而不保存。
答案 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()
,它允许您访问实例但需要您保存它,这可能是一些不好的方法,例如