Как отправить данные обратно в Android-приложение из django rest framework с помощью asynchttp? - PullRequest
0 голосов
/ 01 декабря 2018

Model.py

 class Server(models.Model):
 label = models.TextField(max_length=200,null=True)  #compare this
 upload1 = models.FileField(null=True, blank=True)
 Image1 = models.TextField(upload1, null=True)

 class Android(models.Model):
 label=models.TextField(max_length=200,null=True) #with this
 imagestring=models.TextField(null=True,blank=True)
 returnlabel=models.TextField(null=True,blank=True)

Итак, в моем классе сериализатора я сравниваю метки из модели Android и модели сервера в (def get_returnlabel) и хочу вернуть эту метку обратнов мое приложение для Android. Есть предложения о том, как это сделать. В моем приложении для Android я использую async http.

Serializer.py

   class FoodSerializers(serializers.HyperlinkedModelSerializer):
   class Meta:
   model=Server
   fields=('url','label','Image1','upload1')

 class AndroidSerializers(serializers.ModelSerializer):

    class Meta:
    model = Android
    fields = ('label', 'imagestring', 'returnlabel') (<--returnlabel back to android app)

 #Compare label from Server and Android

 def get_return_label(self, obj):
       queryset = Server.objects.filter( labelServer=obj.label)
       queryset_serializer = FoodSerializers( queryset, many=True, read_only=True)      
       return queryset_serializer.data

Views.py

  class FoodViewSet(viewsets.ModelViewSet):
            queryset = Server.objects.all()
            serializer_class =FoodSerializers

  class Androids(viewsets.ModelViewSet):
        queryset =Android.objects.all()
        serializer_class = AndroidSerializers

1 Ответ

0 голосов
/ 01 декабря 2018

Предполагая, что я правильно понял ваш вопрос, и что вы в основном спрашиваете, как бы вы вернули вывод из 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())
...