Как я могу получить возвращаемое значение метода класса в пределах одного класса?

Я хотел бы узнать, могу ли я получить какую-нибудь информацию по этому поводу.

Пока что у меня есть такой класс:

class MaterialTaggingListView(ServerSideDatatableView):
    def get_queryset(self):
        vLatestUpdateDate = ScTaggingLargeTableIp.objects.values('update_date').order_by('-update_date')[:1]
        request = self.request
        if 'selectedcountries' not in request.session:
            vSelectedCountries = ['CN']
        else:
            vSelectedCountries = request.session['selectedcountries'] 
            vSelectedPlants =request.session['selectedplants'] 
            vSelectedValClass = request.session['selectedvalclass'] 
            vSelectedCoCode = request.session['selectedcocode'] 
           columns = request.session['selectedtags']            
        return ScTaggingLargeTableIp.objects.filter(update_date = vLatestUpdateDate,plant_country__in=(vSelectedCountries), plant__in=(vSelectedPlants), valclass__in=(vSelectedValClass), company_code__in=(vSelectedCoCode))

    def set_columns(self): 
       request = self.request
       columns = request.session['selectedtags']
       return columns

    columns = set_columns()

При использовании этого кода я получил ошибку: missing 1 required positional argument: 'self' Может ли кто-нибудь сказать мне, возможно ли то, что я пытаюсь сделать, и как я могу решить эту ошибку.

Обычно, чтобы это сработало, необходимо инициализировать атрибуты класса в методе __init__, потому что вы не можете установить атрибут объекту, который еще не создан.

Но поскольку вы используете объект self.request в методе set_columns, вам необходимо переопределить метод setup, в котором инициализируется объект request:

class MaterialTaggingListView(ServerSideDatatableView):
    def setup(self, request, *args, **kwargs):
        super().setup(request, *args, **kwargs)
        self.columns = self.set_columns()

Нет, вы не можете этого сделать. Для вызова методов, не относящихся к классу, необходимо создать экземпляр класса. Что вы можете сделать - это либо не задавать columns как переменную уровня класса, либо сделать set_columns классовым методом , но в этом случае он не сможет получить запрос в нем (Django создаст экземпляр вашего представления перед обработкой запроса).

Если вы хотите сохранить columns значение между запросами - храните его в базе данных или в кэше.

Вернуться на верх