Je souhaite modifier un Django-rest-framwork
objet sérialiseur avant d'être enregistré. Voici comment je le fais actuellement -
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()
Comment puis-je le faire avec un Django-rest-framework
objet sérialiseur?
@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()
Vous pouvez modifier l'objet du sérialiseur avant d'enregistrer le sérialiseur:
if serializer.is_valid():
serializer.object.user_id = 15 # <----- this line
serializer.save()
Maintenant édité pour REST framework
Avec REST framework 3 le modèle est maintenant:
if serializer.is_valid():
serializer.save(user_id=15)
Notez que les sérialiseurs n'exposent pas maintenant une instance d'objet non enregistrée en tant que serializer.object
, mais vous pouvez inspecter les données validées brutes comme serializer.validated_data
.
Si vous utilisez les vues génériques et que vous souhaitez modifier le comportement d'enregistrement, vous pouvez utiliser le perform_create
et/ou perform_update
crochets ...
def perform_create(self, serializer):
serializer.save(user_id=15)