2016-03-30 4 views
1

私はDjangoプロジェクトで使用できる強力なレポートライブラリを構築する方法を探しています。カスタムレポートPython/Djangoで始めるところ

私が探しているのは、エンドユーザーがDjangoモデルにアタッチできるようにする関数(レポート)のリストにアクセスする方法です。

たとえば、私はEmployeeオブジェクトを持っているとします。さて、私はreports.pyというモジュールを用意しています。このモジュールには、従業員オブジェクトを取得し、通常はJSON形式でレポートを出力する可能性のあるレポートのリストが増えています。提出されたタイムカードの数、作成された監督の数などがある可能性があります。

私は、(仕事の説明)と呼ばれるFKを介して、変化するレポートリストをEmployeeオブジェクトにリンクしたいと思っています。仕事内容。

  • 直接モデル方法:

    は、私が試したどのようないくつかのもののために良いが、それはいくつかの出力を生成するためのテンプレートやAPIを介してそれらを呼び出すために、プログラマが必要です。利用可能なレポートが変更されているので、私は何もハードコードしたくなく、エンドユーザが利用可能なレポートのリストから選択して関連するモデル(JobDescriptionなど)に添付できるようにします。

  • dir(レポート):選択値がdir(レポート)の結果であるフォームを提供することができましたが、リストではなくファイル内で変数/ライブラリの名前を取得します利用可能なレポートの

私は何かが足りないのですか?私は利用可能なすべてのメソッドを呼び出すことができるカスタムクラスを作成する方法はありますか?私はそのタイプの建築でどこから始めるのですか?

私は本当に入力の任意の並べ替えに感謝します:パスを取る。実際には、この方向への対応は本当に感謝しています。

答えて

1

あなたのdir(reports)アイデアを拡張し、動的にロードされたモジュールシステムを作成することです。モジュールクラスを含む.pyファイルを含むフォルダがあります。 Here's an example of how you can dynamically load classes in Python

各クラスにはgetReportName()という静的関数があるので、ユーザーには何かを見せることができます。createReport(self, myModel)は、モデルを取得してそれに魔法をかけるメンバ関数です。

そして、可能なすべてのレポートをユーザーに表示するだけで、ユーザーは1つを選択し、選択したクラスでcreateReportを実行します。

将来的には、モデルによって異なるレポートフォルダを使用することも考えられますが、これもモデルの__name__属性を使用して反映することが可能です。

+0

この例では、各レポートはスタンドアロンクラスですか? – Craig

+0

@Craigはい、小さなものですが、レポートの説明や追加のものを追加したい場合は、将来の柔軟性をさらに高めることができます。 – Ritave

+0

私はそれが好きです。ニース、そして情報に感謝! – Craig

関連する問題