我是一名自学成才的业余人员,曾试图理解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可以提供数据,但显然它可能是旧数据不再是真实的。只要服务器在首页加载时定义之后运行,原始类变量是否会一直存在? –