Переменная класса ViewSet
Теперь у меня есть следующая логика, реализованная для запроса GET
в Django Rest Framework
:
class SomeViewSet(mixins.ListModelMixin,
GenericViewSet):
count = None
def get_queryset(self):
query_set = ... # some_logic
self.count = query_set.count()
return query_set
def list(self, request, *args, **kwargs):
response = super().list(request, *args, **kwargs)
response.data = {'count': self.count,
'data': response.data}
return response
То есть queryset
вычисляется по сложной логике, и может содержать разное количество объектов, которые нужно вернуть в запросе GET
, так как у меня нет доступа к переменной query_set
внутри функции list и я не хочу копировать логику вычисления query_set
, я решил сделать это с помощью переменной класса.
Но все равно ощущение, что это не очень правильно, не покидает. Какие еще есть варианты?
Вы можете использовать self.get_queryset()
внутри метода list вместо использования переменной класса. Метод get_queryset
будет выполняться каждый раз, когда вы его вызываете, и будет возвращать текущий набор запросов так:
class SomeViewSet(mixins.ListModelMixin,
GenericViewSet):
def get_queryset(self):
return ... # some_logic
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
response = super().list(request, *args, **kwargs)
response.data = {'count': queryset.count(),
'data': response.data}
return response