web-dev-qa-db-ja.com

Django adminアクションのカスタムエラーメッセージ

モデルの特定のフィールドに対して基本的にQuerySet.update()を実行するカスタム管理アクションを記述しました。これらのアクションを完了してはならない場合があります-代わりに、エラーが表示され、何も実行されません。私はもう試した message_userですが、緑色のチェックマークが表示されますが、Django adminエラーメッセージが表示されます。

オンラインで見つけた解決策はModelFormを使用することですが、ここではすべてが管理者変更リストページで行われるため、この場合は当てはまらないと思います。

32
zbar

message_user管理者内で使用される関数は単にcontrib.messages パッケージ。あなたはこのようなことを試すことができます:

from Django.contrib import messages

# Then, when you need to error the user:
messages.error(request, "The message")

warningの代わりにdebuginfosuccessおよびerrorを使用することもできます

お役に立てば幸いです。

35
Bartek
from Django.contrib import messages
...
self.message_user(request, "The message", level=messages.ERROR)

Сanも使用されます(messages.ERROR、messages.WARNING、messages.DEBUG、messages.INFO、messages.SUCCESS)

30
Olga

Django.contrib.messagesバックエンドを使用できます

def my_action(self, request, queryset):
  #do something
  from Django.contrib import messages
  messages.error(request,'Error message')

これにより、エラーメッセージと赤いエラー記号が表示されます。

2
maximus

これが新しいDjangoバージョンで修正されたかどうかはわかりません(Django 1.2.1およびDjango-grappelli 2.0でも説明されている動作を見つけました))。上記のBartekの方法を使用する場合、メッセージを別の方法で表示するように管理テンプレートを変更することもできます。具体的にはbase.htmlで:

これを変える:

{% if messages %}
        <ul class="messagelist">{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>
    {% endif %}

これに:

{% if messages %}
        <ul class="messagelist">{% for message in messages %}<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message}}</li>{% endfor %}</ul>
    {% endif %}

さらに、CSSを微調整する必要があるかもしれませんが、少なくともHTMLの別のliクラスとして表示されます。

ここにCSSの変更例があります(grappelliと互換性があります)

ul.messagelist li.error {
background: url('../img/icons/icon-no.png') 20px 50% no-repeat;
background-color: #f2e6e6;

}
2
gingerlime