Фильтровать запросы с помощью Django-Filter, но возвращать пользовательский JSON
Я хочу иметь возможность передавать запрос через конечную точку (например, /api/generate-team/?rarity=Gold), фильтровать набор запросов и затем возвращать пользовательский JSON на основе некоторых вычислений, которые происходят.
По сути, запрос будет содержать отфильтрованные данные из модели PlayerProfile. Затем данные из PlayerProfile вычисляются, и возвращается пользовательский JSON-ответ.
У меня уже есть FilterSet, созданный для другого представления, который содержит точно такие же фильтры, которые нам нужны, поэтому я хотел бы использовать его повторно.
Вот сжатая версия фильтра (этот фильтр отлично работает с другим видом, для которого я его использую):
class PlayerProfileFilter(django_filters.FilterSet):
rarity = CharInFilter(field_name='rarity', lookup_expr='in')
card_id = CharInFilter(field_name='card_id', lookup_expr='in')
max_overall = django_filters.CharFilter(field_name='overall', lookup_expr='lte')
...
class Meta:
model = PlayerProfile
Вот что я пытаюсь сделать с помощью представления:
class GenerateRosterView(some-kinda-viewset):
queryset = PlayerProfile.objects.all()
filter_backends = (django_filters.DjangoFilterBackend, filters.SearchFilter,)
filterset_class = PlayerProfileFilter
def do_some_calculations_to_filtered_query_set():
doSomething(queryset)
return {"calculations": 1}
У меня проблемы с передачей фильтрованного запроса в функцию и возвращением пользовательского JSON-ответа.
Я делаю это так, надеюсь, это поможет вам -
def get_queryset(self):
fromUrl == self.request.GET.get('rarity') # get queryparameter from url
if fromUrl is None:
#queryset = anyModel.objects.all()
queryset = anyModel.objects.none()
else:
queryset = anyModel.objects.filter(anyData = fromUrl)
return queryset