Django类视图中的类变量vs方法

2024-04-27 00:56:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个自学成才的业余爱好者,一直试图理解Python、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

有人能帮我理解我在最初的尝试中打破的规则吗?你知道吗


Tags: 数据buildnonefieldstablesreturndefhtml
1条回答
网友
1楼 · 发布于 2024-04-27 00:56:29

您不应该将primary_tablesecondary_table设置为类变量,因为它们在加载模块时只计算一次。你知道吗

正如您已经指出的,正确的方法是使用方法。这样,方法在视图运行时运行,因此您可以获得最新的值。你知道吗

相关问题 更多 >