我想知道我是否可以對此有所了解。
到目前為止,我有這門課:
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()
使用上面的代碼,我得到了錯誤:缺少 1 個必需的位置引數:'self' 誰能告訴我我正在嘗試做的事情是否可行以及如何解決該錯誤。
uj5u.com熱心網友回復:
通常,您需要在__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()
uj5u.com熱心網友回復:
不,你不能那樣做。你需要創建一個類的實體來呼叫它的非類方法。你可以做什么 - 要么不設定columns為類級變數,要么創建set_columns一個classmethod,但在這種情況下,它將無法在其中接收請求(Django 將在處理請求之前創建您的視圖實體)。
如果您想columns在請求之間保留值 - 將其存盤在資料庫或快取中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507303.html
