2009-09-02 88 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.')