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 フレームワーク 3 用に編集されました

REST フレームワーク 3 では、パターンは次のようになりました。

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

シリアライザは未保存のオブジェクト インスタンスを として公開することはありませが、未加工の検証済みデータを として検査できることに注意してください。serializer.objectserializer.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 に答える