2011-04-26 27 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()