2017-07-27 22 views
1

私は、これまでに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 

誰かが私は私の元の試みで破っていたルールを理解するのに役立つだろうか?

+0

私は本当にあなたが何を求めているのか分からない。何が問題なのか、その解決策が分かっているからだ。クラス変数を正しく識別するので、クラス変数とインスタンス変数の違いは明らかです。あなたは何が欠けていますか? –

+0

なぜ私はページを読み込むことができるのだろうと思っていましたが、CBVはデータを配信することができますが、もはや真ではない古いデータになる可能性があります。元のクラス変数は、最初のページの読み込み時に定義された後、サーバーが実行されている間は保持されますか? –

答えて

1

primary_tablesecondary_tableは、モジュールがロードされたときに一度だけ計算されるため、クラス変数として設定しないでください。

すでに解決済みですが、正しい方法はメソッドを使用することです。この方法では、ビューが実行されるときにメソッドが実行されるため、最新の値が得られます。

+0

それはそれをクリアし、私は今の違いを理解しています。ありがとうございました! –

関連する問題