2011-04-26 59 views
0

我有一个Django管理界面,几乎完全是作为gui的形式来改变单个postgresql表。还有一个Python脚本,当前对命令行进行手动运行时,只要对数据库进行更改,我就会将其挂起,以便在有人在对表格中的某行进行更改时点击“保存”通过管理界面。如果这是views.py中的一个条目,它看起来像我将该脚本作为模块导入并从视图中运行其主要功能(即Can Django use "external" python scripts linked to other libraries (NumPy, RPy2...))。但是,我不确定如何在管理界面中执行此操作。从Django管理界面调用外部脚本?

  • admin.py如何与views.py中的常规条目相似/不同?
  • 我在哪里把导入/调用到外部脚本 - 在模型的某个地方,在admin.py的某个地方?

我熟悉Python,但是相当新的(&由有些迷惑不解)“网络的东西”(即框架,如Django的),&我甚至不知道我在问这个问题,很清楚,因为我仍然在视图/模型的概念有点模糊......

编辑:结果我发现我,其实,找到解决方案通过阅读文档/教程,但假设有与管理员的差异。正如Keith在评论中提到的,我现在遇到了权限问题,但我想这是一个单独的问题。所以感谢,&也许我会停下来的第二个猜测自己...

+0

“......每当有人点击运行 ”拯救“ ......”。你为什么不使用模型的'save()'方法呢? – 2011-04-26 17:35:44

+0

它可以,但是您也可能会遇到权限问题,因为webserver作为另一个用户运行。您是否尝试过将必要的Python代码合并到处理程序中? – Keith 2011-04-26 17:43:16

+0

@ S.Lott - 我没有看到模型中定义的save()方法,它是隐式的吗?我不完全确定当用户点击gui中的保存按钮时会发生什么,坦率地说......像我说的,对Django来说是非常新的。 – Beekguk 2011-04-26 17:52:50

回答

2

一般情况下,你想在“保存”时间发生的事情不是对模型的

  1. 部分。

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

    你可以做任何事情save方法。

  2. 视图函数的一部分。

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

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()