Django: фильтровать набор запросов по нескольким идентификаторам - PullRequest
0 голосов
/ 04 сентября 2018

Мой запрос довольно прост, в моем приложении Django REST есть модель Vendor. Я хочу использовать ответ get с несколькими идентификаторами и вернуть все соответствующие модели с этими идентификаторами. Шаблон URL GET может выглядеть примерно так: r'^api/vendors?id=1,2,3'.

Сейчас я думаю о том, чтобы использовать ListAPIView, а в методе list отфильтровать мой набор запросов со всеми идентификаторами в URL. Но я не уверен, как именно этого добиться (фильтруя набор запросов по списку идентификаторов, я очень новичок в Python и Django), поэтому, если кто-нибудь сможет дать какой-либо совет по этому поводу, он будет очень признателен.

1 Ответ

0 голосов
/ 04 сентября 2018

(К сожалению, я не знаю django REST, поэтому здесь дано чистое решение django)

Используя ListAPIView, вы можете получить доступ к параметрам URL (или GET) и изменить набор запросов.

class MyVendorView(ListAPIView):
    # attributes

    def get_queryset(self):
        id_string = self.request.GET.get('id')
        if id_string is not None:
            ids = [int(id) for id in id_string.split(',')]
            return Vendor.objects.filter(id__in=ids)

        else:
            return Vendor.objects.all()

    # other methods

обратите внимание, что я использую любые атрибуты или другие необходимые атрибуты

Что здесь происходит тогда?

  • Переопределение get_queryset будет контролировать, какие результаты мы получим при попадании в представление

  • self.request.GET.get('id') Извлекает значение параметра запроса id из URL-адреса следующим образом: localhost:8000/api/vendors?id=1,2,3 результатом будет строка "1,2,3".

  • filter(id__in=ids) позволяет вам сказать, выбрать материал, который имеет значение в этом списке идентификаторов

...