dire che ho un semplice vista Django REST quadro che è l'estensione più classi modello e serve tutti i metodi di endpoint un URL:Django Resto quadro - classe serializer separato per ogni metodo nel modello di vista API basato
class UserAPIView(RetrieveAPIView, DestroyAPIView, BaseObjectAPIView):
permission_classes = (IsAuthenticated,)
serializer_class = UserSerializer
def get_serializer_class(self, *args, **kwargs):
# return different serializer depending on method??
# return UserUpdateSerializer
return UserViewSerializer
def get(self, request, *args, **kwargs):
"""
Retrieve user details
"""
# ...
return Response(data={'result': "OK"}, status=200)
def delete(self, request, pk):
"""
Delete user
"""
# ...
return Response(data={'result': "OK"}, status=200)
def put(self, request, pk):
"""
Change user
"""
# ...
return Response(data={'result': "OK"}, status=200)
Ora bisogno di utilizzare diversi serializzatori per metodo, come il mio get-metodo utilizzerà i campi diverso dal mio put-metodo, esempio serializzatori:
class UserViewSerializer(serializers.ModelSerializer):
firstname = serializers.Field(source='firstname')
lastname = serializers.Field(source='lastname')
username = serializers.Field(source='username')
class Meta:
model = User
class UserUpdateSerializer(serializers.ModelSerializer):
firstname = serializers.Field(source='firstname')
lastname = serializers.Field(source='lastname')
class Meta:
model = User
è possibile utilizzare diversi serializzatori per ogni metodo nel mio modello vista basato su API ?
UPDATE:
so come usare diversi serializzatori all'interno dei metodi stessi.
Ma ho bisogno di ottenere l'API Browsable generata da Swagger (modulo Django rest_framework_swagger) per recuperare diversi serializzatori per ciascun metodo. Posso vedere che il caricamento della pagina del browser API attiva get_serializer_class, ma all'interno di quel metodo, non so quale metodo cerca di ottenere il serializzatore da parte di Swagger.
Come posso ottenere rest_framework_swagger per recuperare diversi serializzatori per metodo?
Hai mai trovato una soluzione per questo? –