Как я могу получить возвращаемое значение метода класса в пределах одного класса?
Я хотел бы узнать, могу ли я получить какую-нибудь информацию по этому поводу.
Пока что у меня есть такой класс:
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
значение между запросами - храните его в базе данных или в кэше.