2011-07-25 53 views
7

我想返回Django管理頁面的save_model函數中的一些自定義錯誤消息。Django admin在模型保存期間返回自定義錯誤消息

class EmployerAdmin(admin.ModelAdmin): 
    exclude = ('update_user','updatedate','activatedate','activate_user') 

    def save_model(self, request, obj, form, change): 
    if obj.department != None and obj.isDepartmentSuggested: 
     obj.isDepartmentSuggested =False 
    else: 
     return "You don't set a valid department. Do you want to continue ?" 

    obj.update_user = request.user 
    obj.updatedate = datetime.datetime.now() 
    obj.save() 

當然,Else部分是不正確的,但我想說明我想要的。

我很高興爲我推薦一種方法或文檔來做到這一點。 感謝

回答

10

您需要使用一種形式做您的驗證在你的EmployerAdmin:

#forms.py 
from your_app.models import Employer 

class EmployerAdminForm(forms.ModelForm): 
    class Meta: 
     model = Employer 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     department = cleaned_data.get('department') 
     isDepartmentSuggested = cleaned_data.get('isDepartmentSuggested') 
     if department == None and not isDepartmentSuggested: 
      raise forms.ValidationError(u"You haven't set a valid department. Do you want to continue?") 
     return cleaned_data 

#admin.py 
from django.contrib import admin 
from your_app.forms import EmployerAdminForm 
from your_app.models import Employer 

class EmployerAdmin(admin.ModelAdmin): 
    exclude = ('update_user','updatedate','activatedate','activate_user') 
    form = EmployerAdminForm 

admin.site.register(Employer, EmployerAdmin) 

希望有所幫助你。

+0

謝謝。這就是我想要的。你能告訴我如何渲染錯誤消息旁邊的彈出框或繼續按鈕嗎?或者我應該:) – brsbilgic

+1

首先,您需要將相關字段設置爲不需要,並且/或者可以爲空(即使不適用),因爲即使他們沒有做出選擇,也要讓人們繼續。要做彈出窗口,你需要一個JavaScript「確認」對話框。看看:http://jqueryui.com/demos/dialog/#modal-confirmation來獲得一些想法。 – Brandon

+0

你可以建議我的解決方案,當我想檢查例如上傳的文件與一些額外的方法,然後返回錯誤? – andi

0

我使用的是Django 1.6.3,我想添加Brandon的答案。

admin.site.register(Employer, EmployerAdmin)作爲低於EmployerAdmin類的單獨行添加;也就是說,在form = EmployerAdminForm以下,不需要縮進。

我花了一些時間才弄明白爲什麼布蘭登的答案不適合我,驗證沒有運行,顯然,您只需要先在管理員註冊。

乾杯。

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 –

+0

問題是,我沒有足夠的代表點,我覺得這應該被分享來拯救其他人以前遇到的麻煩。 :) –

+0

對不起,我離開了管理員註冊。我已經更新了我的答案。 – Brandon