Предполагая, что я правильно понял ваш вопрос, и что вы в основном спрашиваете, как бы вы вернули вывод из get_return_label()
обратно на свой клиент Android, тогда вы просто сможете создать дополнительное действие в вашем наборе за это.Сначала вам нужно переместить get_return_label()
в набор.
Например:
from rest_framework.response import Response
class FoodViewSet(viewsets.ModelViewSet):
queryset = Server.objects.all()
serializer_class = FoodSerializers
@action(detail=False, methods=['post'])
def get_return_label(self, request):
obj = request.data # The RecognizingFood object posted by the client
queryset = Server.objects.filter(label=obj['label'])
queryset_serializer = FoodSerializers(queryset, many=True, read_only=True)
return Response(queryset_serializer.data)
Чтобы получить к нему доступ, вы должны использовать существующий URL-адрес FoodViewSet
с добавлением /get_return_label/
Альтернативой является создание выделенного вида конечная точка:
from rest_framework import views
class GetReturnLabelView(views.APIView):
def post(self, request):
obj = request.data # The RecognizingFood object posted by the client
queryset = Server.objects.filter(label=obj['label'])
queryset_serializer = FoodSerializers(queryset, many=True, read_only=True)
return Response(queryset_serializer.data)
def get(self, request):
queryset = Server.objects.filter(label=request.data['label'])
queryset_serializer = FoodSerializers(queryset, many=True, read_only=True)
return Response(queryset_serializer.data)
и отображение этого в вашем urls.py
:
path(r'get_return_label', views.GetReturnLabelView.as_view())