我是一名自學成才的業餘人員,曾試圖理解Python,Django和一般編程的基礎知識。我期待了解我遇到的問題。基於Django類的視圖中的類變量與方法
所以我有這個類
class ContractsView(InventoryView):
template_name = "contracts.html"
page = "Contracts"
primary_table, secondary_table = build_contracts_tables(**{"commodity": None})
,並使用以下功能:
def build_contracts_tables(**kwargs):
print('fire')
primary_table_query = Purchase.inventory.current_contracts_totals(**kwargs)
primary_table_fields = ("total_meats", "total_value", "meat_cost")
primary_table_html = build_table([primary_table_query,], *primary_table_fields) if primary_table_query else err_str
secondary_table_query = Purchase.inventory.current_contracts(**kwargs)
secondary_table_fields = ("invoice", "supplier", "variety", "meats", "value", "meat_cost", "ship_date")
secondary_table_html = build_table(secondary_table_query, *secondary_table_fields) if secondary_table_query else err_str
return primary_table_html, secondary_table_html
不知何故,該視圖送點東西給模板,因爲它使一些數據。但是,數據並沒有立即更新(它最終會這樣做),這意味着我將在更改數據庫後刷新它,但舊數據將會保留。另外,我從未看到我的print
出現在控制檯中。
然而,當我轉換類變量爲函數,它工作得很好:
class ContractsView(InventoryView):
template_name = "contracts.html"
page = "Contracts"
def primary_table(self):
x,y = build_contracts_tables(**{"commodity": None})
return x
def secondary_table(self):
x, y = build_contracts_tables(**{"commodity": None})
return y
有人能幫助我瞭解我在我原來的企圖打破規則?
我不確定你在問什麼,因爲你知道問題是什麼以及解決方案是什麼。而且你可以正確識別類變量,所以你顯然知道類和實例變量之間的區別。那麼你錯過了什麼? –
我只是想知道爲什麼我可以加載頁面,CBV可以提供數據,但顯然它可能是舊數據不再是真實的。只要服務器在首頁加載時定義之後運行,原始類變量是否會一直存在? –