Переменная класса 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
Вернуться на верх