保存前编辑 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 许可协议

阅读 622
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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题