53

我想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()
4

2 回答 2

75

现在为 REST framework 3 编辑

使用 REST framework 3,模式现在是:

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

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

如果您正在使用通用视图并且想要修改保存行为,您可以使用perform_createand/orperform_update钩子...

def perform_create(self, serializer):
    serializer.save(user_id=15)
于 2012-11-26T12:05:25.667 回答
31

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

if serializer.is_valid():
    serializer.object.user_id = 15 # <----- this line
    serializer.save()
于 2013-02-28T21:35:58.273 回答