从Django管理表单输入中导出文件(CSV,PDF)

时间:2017-12-09 04:07:26

标签: python django csv pdf django-admin

Django管理员中的所有 ,我想输入与生成报告相关的表单字段。您希望在报告中使用的字段:报告名称,报告类型,开始和结束日期,报告字段等。

如何获取这些输入,从请求中获取输入,将这些输入传递给API(在后台),然后处理它(以类似队列的方式),最后创建一个CSV或PDF进行下载? / p>

我很适合创建管理模型表单,我认为在管理员提交表单时抓取输入,然后我想我只是将这些输入传递给我的其他API代码来处理......

我的问题是:

  1. 当第三方API处理请求时,是否有一种特殊的方法来处理这个延迟时间?
  2. 我在何处以及如何在管理界面中返回结果(CSV或PDF)? /change/页面?
  3. 这是最好的做法吗?在处理管理员时,我无法找到这样的例子。我不是Python的新手,但对Django来说有点新鲜。

1 个答案:

答案 0 :(得分:0)

没有人会回答。因此,我将分享我的高级通用解决方案。

  1. 您需要设置celery.py并修改您在{芹菜'文档中显示的__init__.py。关键"陷阱"是他们放置" proj"的地方,你应该把项目的实际名称,而不是" proj"。
  2. 在您的admin.ModelAdmin班级中,覆盖save_model(self, request, obj, form, change)以捕获从管理表单提交的表单数据。
  3. 使用表单输入并传递到当前应用中tasks.py内的芹菜任务函数。例如:get_report.delay(name, start, end, type)。请注意 .delay 部分,因为它允许它在后台运行,而无需在提交表单后在屏幕上等待。
  4. save_model(...)中,您仍需要在结尾处致电super().save_model(request, obj, form, change)
  5. 最重要的一步 - 你打开了两个终端! 1用于运行python manage.py runserver(例如),另一个用于启动celery worker。我在Windows和Windows上有问题所以非并发解决方案是celery -A scorecard worker --pool=solo -l info(启动工作人员 - 你在终端中键入它),或者,你可以安装eventlet并使用eventlet作为--pool=eventlet值代替--pool=solo