Django: получить все отличные значения от атрибута в дБ - PullRequest
0 голосов
/ 31 марта 2020

Итак, у меня есть модель "сайт", которая имеет атрибут страны. Мне нужна конечная точка, которая выбирает все страны, для которых у меня есть следующий фильтр:

 countries = Site.objects.order_by().values("country").distinct()

Возвращает набор запросов. Какой лучший способ вернуть эти данные? Сериализатор использует модель, верно? Но это всего лишь набор запросов строк ..

1 Ответ

2 голосов
/ 31 марта 2020

Если вам нужен только список значений страны, вы можете использовать values_list:

countries = list(Site.objects.values_list("country",flat=True).order_by("country").distinct())

values_list возвращает кортежи, которые можно повторять, flat=True заставляет возвращать набор запросов единичных значений (так что вам все равно нужно будет преобразовать его в список для возврата в ответе json в вашей конечной точке).

Таким образом, ваша конечная точка может в конечном итоге выглядеть примерно так (используя DRF):

from rest_framework.views import APIView

class CountriesView(APIView):
    def get(self, request, *args, **kwargs):
        sites = Site.objects.all()
        country_list = list(sites.values_list("country", flat=True).order_by("country").distinct())
        data = {"countries": country_list}
        return Response(data=data, status=200)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...