Как получить значение набора запросов после поиска с помощью Django Rest Framework - PullRequest
0 голосов
/ 08 марта 2019

Я использую Django Rest Framework, и мне нужно queryset , отфильтрованный с помощью поиска. Этот queryset отправляется в CarSerializer. empidlong от CarSerializer будет иметь empid для запросов JSON с определенного URL (192.168.10.3).

from django.shortcuts import render

# Create your views here.
from rest_framework import viewsets, filters
from .models import getData
from .serializers import CarSerializer
import requests
class CarViewSet(viewsets.ModelViewSet):
    queryset = getData.objects.all()
    serializer_class = CarSerializer
    filter_backends = (filters.SearchFilter,)
    #search_fields = ('plate_no')
    __basic_fields = ('plate_no',)
    search_fields = __basic_fields

  def get_search_fields(self, view, request):
            if request.query_params.get('khai'):
                return ('plate_no',)


            x= super(CarViewSet, self).get_search_fields(view, request)
            serializer = CarSerializer(x)
            data = serializer.data
            for a in data:
                empid= a['empidlong']
                requests.get('http://192.168.10.3/GetEmployees/'+empid +'/Y')
            return x

1 Ответ

0 голосов
/ 08 марта 2019

Используйте фильтр Django, это будет легко с наборами

views.py

from rest_framework.filters import SearchFilter
from django_filters.rest_framework import DjangoFilterBackend
class CarViewSet(viewsets.ModelViewSet):
    filter_class = getDataFilter
    filter_backends = (SearchFilter, DjangoFilterBackend)
    queryset = getData.objects.all()
    serializer_class = CarSerializer

создайте файл filters.py, там вы указываете поля для фильтрации со всеми условиями,

import django_filters
from .models import getData

class getDataFilter(django_filters.FilterSet):

    class Meta:
        model = User
        fields = {
            'first_name': ['iexact', 'icontains', 'istartswith'],
            'last_name': ['iexact', 'icontains', 'istartswith'],
        }

формат URL такой,

https://localhost:8000/xxxx/?last_name__iexact=xx
...