从Django管理界面调用外部脚本?

时间:2011-04-26 17:27:11

标签: python django django-admin django-views

我有一个Django管理界面,几乎只用作gui表单来更改单个postgresql表。每当对数据库进行更改时,当前还会从命令行手动运行Python脚本。我想把它连接起来,这样只要有人在通过管理界面更改到表的一行后点击“保存”就会运行它。如果这是一个在views.py中的条目,看起来我将脚本作为模块导入并从视图中运行其主函数(即Can Django use "external" python scripts linked to other libraries (NumPy, RPy2...))。但是,我不确定如何在管理界面中执行此操作。

  • admin.py与views.py?
  • 中的常规条目有何相似/不同之处
  • 我在哪里将导入/调用放在外部脚本中 - 模型中的某个位置,位于admin.py中的某个位置?

我对Python很熟悉,但对于“web stuff”(即像Django这样的框架)而言,我是相当新的(并且有些神秘)。我甚至不确定我是否非常清楚地问这个问题,因为我对视图/模型概念仍然有点模糊......

编辑事实证明,我已经通过阅读文档/教程找到了解决方案,但是假设管理员的内容存在差异。正如Keith在评论中提到的,我现在遇到了权限问题,但我想这是一个单独的问题。谢谢,&也许我会停止猜测自己......

2 个答案:

答案 0 :(得分:2)

通常,您希望在“保存”时间发生的事情是

  1. 模型的一部分。

    如果有,请覆盖模型的save方法:http://docs.djangoproject.com/en/1.3/ref/models/instances/#saving-objects

    您可以使用save方法执行任何

  2. 视图功能的一部分。

    如果是这样,您要么扩展管理界面(不是那么容易),要么自己编写。

答案 1 :(得分:1)

您可以考虑的一件事是在ModelAdmin中定义save_model方法。这将在有人从管理员保存时执行(但是当有人在管理员之外进行保存时)。这种方法可能取决于您的要求,但在从管理员进行保存时应该为您提供必要的挂钩。

在admin.py

class MyModelAdmin(admin.ModelAdmin):

    model = models.MyModel

    def save_model(self, request, obj, form, change):

        # you can put custom code in here
        obj.save()