Quindi ho cercato di caricare un file su un metodo utilizzando DRF senza fortuna fino ad ora.Django Rest Framework carica il file su un metodo
sono stato in grado di caricare su un ModelViewSet
utilizzando (FormParser, MultiPartParser,)
senza problemi, ma ho davvero bisogno di utilizzarlo in qualcosa di simile http://localhost:8000/api/v1/women/{pk}/upload_avatar/
dove voglio filtrare prima la donna da id e caricare sul suo avatar (che è una straniera chiave per un modello multimediale). Ho provato a utilizzare una libreria di risorse nidificata senza fortuna.
finora ho nel mio modelviewset:
class WomenNativePassportViewSet(viewsets.ModelViewSet):
queryset = Women.objects.all()
serializer_class = WomenNativePassportSerializer
authentication_classes = (NoAuthentication,)
permission_classes = (AllowAny,)
parser_classes = (FormParser, MultiPartParser,)
@detail_route(
methods=['post', 'put', 'patch', 'get'], permission_classes=[AllowAny],
authentication_classes=[NoAuthentication], serializer_class=MultimediaSerializer,
parser_classes=(FormParser, MultiPartParser,)
)
def upload_avatar(self, request, pk=None, *args, **kwargs):
if 'POST' in request._method or 'PATCH' in request._method:
# Write code to save the file??
else:
multimedia = Multimedia.objects.filter(user_profiles_avatares__pk=pk)
page = self.paginate_queryset(multimedia)
serializer = self.get_pagination_serializer(page)
return Response(serializer.data)
I miei modelli:
class Women(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
avatar = models.ForeignKey(
'core.Multimedia', blank=True, null=True,
related_name='user_profiles_avatares'
)
class Multimedia(models.Model):
file = models.FileField(upload_to=upload_to, null=True, blank=True)
thumbnail = models.FileField(upload_to=upload_to, null=True, blank=True)
In sostanza vorrei sapere se questa è la strada giusta sto prendendo, e se sì, come posso salvare correttamente il file caricato nel modello ??
Suggerisco di cambiare il controllo del metodo in modo che assomigli a 'if request.method in ['PATCH', 'POST']', poiché 'request.method' è sempre un metodo unico. – gregoltsov