python Modifica dell'oggetto serializzatore django-rest-framework prima del salvataggio




django rest framework upload image (2)

È possibile modificare l'oggetto del serializzatore prima di salvare il serializzatore:

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

Voglio modificare un oggetto serializzatore django-rest-framwork prima che venga salvato. Questo è come lo faccio attualmente -

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()

Come posso farlo con un oggetto serializzatore 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()

Answer #1

Ora modificato per REST framework 3

Con REST framework 3 il modello è ora:

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

Si noti che i serializzatori non espongono mai un'istanza di oggetto non salvata come serializer.object , tuttavia è possibile ispezionare i dati validati come serializer.validated_data .

Se stai usando le viste generiche e vuoi modificare il comportamento di salvataggio puoi usare gli perform_create e / o perform_update ...

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






django-serializer