2009-09-02 43 views
8

私はDjango管理者にエラーメッセージを表示する方法を知りたいと思います。Django admin、カスタムエラーメッセージ?

私のサイトには、ユーザーが「ポイント」を使用してリクエストを作成できるプライベートユーザーセクションがあります。リクエストは2種類のリクエストに応じて1〜2ポイントをユーザアカウントから受け取ります。したがって、アカウントに0ポイントがある場合、ユーザはリクエストを行うことはできません...プライベートユーザセクションではすべて問題ありませんが、また、会社に電話し、電話で要求を行い、この場合、私は、ユーザーのポイントは、すべてのヘルプは素晴らしい:)

0になります。

された場合にカスタムエラーメッセージを表示するために管理者を必要とすることができます

ありがとうございました

答えて

20

これを行う1つの方法は、管理ページの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/ja/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin – adam

4

私はこの種のものに組み込みのメッセージシステムを使用しました。これは、オブジェクトを追加/変更したときに画面の上部に黄色のバーを印刷する機能です。

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

the documentationを参照してください。

+0

を、フォームの検証がより良い選択肢である(ガブリエルの答えを参照してください)。 –

+0

申し訳ありませんが、私はそれがフォームかどうかはOPからは明らかではないと思いました。読んで、あなたはおそらく正しいでしょうが、これはとにかく便利なテクニックです。 –

+0

注:このメソッドは、Djangoバージョン<1.2で機能しました。 1.2では、メッセージフレームワークが変更されました。そこにあるドキュメンテーションのリンクは、静的な1.1のドキュメントではなく、開発バージョンのドキュメントにリンクするので、上のコードと矛盾します。コードスニペットまたはドキュメントリンクのいずれかを更新する価値があります。 –

1

Djangoのバージョンエラーメッセージについては< 1.2​​

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