我正在尝试找到一种方法来构建一个可以与Django项目一起使用的健壮的报表库。
基本上,我正在寻找的是一种访问功能列表(报告)的方法,我可以允许最终用户连接到Django模型。
例如,假设我有一个Employee对象。好吧,我有一个名为reports.py的模块,它有一个不断增长的可能报告列表,它们采用员工对象并输出报告,通常采用JSON格式。可能会提交多个时间卡,创建的监督数量等。
我希望能够通过名为(职位描述)的FK将这些不断变化的报告列表链接到Employee对象,因此管理员可以为每个职位描述创建自定义报告。
我尝试了什么:
直接模型方法:适用于某些事情,但它需要程序员在模板中调用它们或通过API来生成一些输出。由于可用报告正在发生变化,我不想对任何内容进行硬编码,而是希望最终用户从可用报告列表中进行选择,并将它们附加到相关模型(比如JobDescription)。
dir(报道):我可以提供一个表格,其中选择值是dir(报告)的结果,但之后我会得到文件中调用的变量/库的名称,而不仅仅是可用报告列表
我错过了什么吗?有没有办法创建一个自定义类,我可以从中调用所有可用的方法?我甚至从哪种架构开始呢?
我非常感谢任何形式的输入:要走的路。真的只是一个'朝这个方向看'的回应真的很感激。
答案 0 :(得分:1)
我要做的是扩展您的dir(reports)
想法,并创建一个动态加载的模块系统。拥有包含模块类的.py文件的文件夹。 Here's an example of how you can dynamically load classes in Python
每个类都有一个名为getReportName()
的静态函数,因此您可以向用户显示可读的内容,以及一个成员函数createReport(self, myModel)
,它可以获取模型并使其具有魔力。
然后只是向用户显示所有可能的报告,用户选择一个,然后在所选类上运行createReport
。
将来您可能会考虑为不同的模型使用不同的报告文件夹,这也可以通过使用模型的__name__
属性进行反映来实现。