我有一个Django管理界面,几乎只用作gui表单来更改单个postgresql表。每当对数据库进行更改时,当前还会从命令行手动运行Python脚本。我想把它连接起来,这样只要有人在通过管理界面更改到表的一行后点击“保存”就会运行它。如果这是一个在views.py中的条目,看起来我将脚本作为模块导入并从视图中运行其主函数(即Can Django use "external" python scripts linked to other libraries (NumPy, RPy2...))。但是,我不确定如何在管理界面中执行此操作。
我对Python很熟悉,但对于“web stuff”(即像Django这样的框架)而言,我是相当新的(并且有些神秘)。我甚至不确定我是否非常清楚地问这个问题,因为我对视图/模型概念仍然有点模糊......
编辑事实证明,我已经通过阅读文档/教程找到了解决方案,但是假设管理员的内容存在差异。正如Keith在评论中提到的,我现在遇到了权限问题,但我想这是一个单独的问题。谢谢,&也许我会停止猜测自己......
答案 0 :(得分:2)
通常,您希望在“保存”时间发生的事情是
模型的一部分。
如果有,请覆盖模型的save
方法:http://docs.djangoproject.com/en/1.3/ref/models/instances/#saving-objects
您可以使用save
方法执行任何。
视图功能的一部分。
如果是这样,您要么扩展管理界面(不是那么容易),要么自己编写。
答案 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()