2009-09-02 87 views
8

我想知道如何在Django管理員中顯示錯誤消息。Django管理員,自定義錯誤消息?

我在我的網站上有一個私人用戶部分,用戶可以使用「點數」創建請求。一個請求從用戶的賬戶中取得1或2個點(取決於兩種類型的請求),所以如果賬戶有0個點,用戶不能提出任何請求......在私人用戶部分中,這一切都很好,但用戶也可致電該公司,並通過電話的請求,在這種情況下,我需要管理員展現在用戶點的情況下,自定義錯誤消息是0

任何幫助將是不錯:)

謝謝你們

回答

20

一種方法是通過覆蓋管理頁面的ModelForm。這使您可以編寫自定義驗證方法並非常乾淨地返回您選擇的錯誤。像這樣在admin.py:

from django.contrib import admin 
from models import * 
from django import forms 

class MyForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
    def clean_points(self): 
     points = self.cleaned_data['points'] 
     if points.isdigit() and points < 1: 
      raise forms.ValidationError("You have no points!") 
     return points 

class MyModelAdmin(admin.ModelAdmin): 
    form = MyForm 

admin.site.register(MyModel, MyModelAdmin) 

希望幫助!

+0

甚至有文件記錄! http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin – adam 2011-05-24 21:34:49

4

我已經使用內置的消息系統這種事情。這是在添加/更改對象時在屏幕頂部打印黃色條的功能。你可以很容易地使用它自己:

request.user.message_set.create(message='Message text here') 

請參閱the documentation

+0

的錯誤信息,表單驗證是一個更好的選擇(見加布裏埃爾的答案)。 – 2009-09-03 15:43:05

+0

同意,但我不認爲從OP可以看出它是否是一種形式。在重讀時,你可能是對的,但無論如何這都是一種有用的技巧。 – 2009-09-03 20:51:21

+0

注意:此方法適用於Django版本<1.2。在1.2中,消息框架發生了變化。那裏的文檔鏈接鏈接到開發版本文檔,而不是靜態1.1文檔,所以現在它與上面的代碼不一致。這可能值得更新代碼段或文檔鏈接,無論你喜歡什麼。 – 2010-04-20 21:41:18

1

的Django版本< 1.2​​

from django.contrib import messages 
messages.add_message(request, messages.INFO, 'Hello world.')