保存前编辑 django-rest-framework 序列化程序对象

新手上路,请多包涵

我想在保存之前编辑一个 django-rest-framwork 序列化程序对象。这就是我目前的做法 -

 def upload(request):
    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid(): # All validation rules pass
             obj = form.save(commit=False)
             obj.user_id = 15
             obj.save()

我如何使用 django-rest-framework 序列化程序对象来实现?

 @api_view(['POST','GET'])
def upload_serializers(request):
    if request.method == 'POST':
         serializer = FilesSerializer(data=request.DATA, files=request.FILES)
         if serializer.is_valid():
              serializer.save()

原文由 user680839 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 619
2 个回答

您可以在保存序列化程序之前编辑序列化程序的对象:

 if serializer.is_valid():
    serializer.object.user_id = 15 # <----- this line
    serializer.save()

原文由 zephyr 发布,翻译遵循 CC BY-SA 3.0 许可协议

现在为 REST framework 3 编辑

对于 REST framework 3,现在的模式是:

 if serializer.is_valid():
    serializer.save(user_id=15)

请注意,序列化程序现在 不会 将未保存的对象实例公开为 serializer.object ,但是您 可以 将原始验证数据检查为 serializer.validated_data

如果您使用的是通用视图并且想要修改保存行为,则可以使用 perform_create 和/或 perform_update 挂钩…

 def perform_create(self, serializer):
    serializer.save(user_id=15)

原文由 Tom Christie 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题