2011-11-15 55 views
3

我想通過django管理控制檯保存模型時執行檢查。我想過用ModelAdmin.save_model(),但是,從文檔,它說:在Django的管理員中保存模型時執行檢查

ModelAdmin.save_model()和ModelAdmin.delete_model()必須保存/刪除對象,他們不是否決的目的,相反,它們允許你執行額外的操作。

我需要執行檢查來強制執行時間約束,只有當模型正在編輯,並且在某些情況下,我需要不執行保存。 (例如,如果已經過了午夜,管理員正在嘗試編輯模型實例,我不想保存更改,並提醒管理員已過午夜......)

什麼是最佳地點那麼考慮ModelAdmin.save_model不能否決保存操作?

回答

3

只需通過clean方法創建一個帶有正常驗證的模型表單,然後通過在ModelAdmin類中執行form = MyFormClass來爲管理員分配該表單。

+0

我可能錯過了一些明顯的東西,但是有沒有一種安全/可靠的方法來知道模型實例是否正在編輯或插入到ModelForm的乾淨方法中?我只想在編輯時強制執行驗證。 – jeannicolas

+1

你可以檢查self.instance.pk的值 - 如果它有一個值,它是一個編輯。 –

0

這不是真的特定於管理員站點,但this section描述瞭如何覆蓋模型上的保存功能,它允許您防止保存模型。可能是有一種方法可以用這種方法做你想做的事情。

編輯:

我100%在這裏猜測,但也許在admin.py做這樣的事情,你可以允許它是管理特定的。

from blah.model import * 

def newSaveFunction(self, *args, **kwargs): 
    doStuff 

MyModel.save = newSaveFunction 

admin.site.register(MyModel) 
+0

我想過,但我不知道如何在管理區域顯示錯誤消息... – jeannicolas

+0

是的,那一部分我不太確定。 – obmarg

相關問題