Django管理员操作中的自定义错误消息

时间:2010-07-13 21:23:16

标签: django django-models django-admin

我编写了自定义管理操作,基本上对模型中的某些字段执行QuerySet.update()。有些时候不应该允许这些操作完成 - 相反,它们应该显示错误而不做任何事情。我试过了message_user,但是显示了一个绿色的复选标记,而我希望它显示Django管理错误信息。

我在网上找到的解决方案是使用ModelForm,但我不认为这适用于这种情况,因为这一切都发生在管理员更改列表页面上。

4 个答案:

答案 0 :(得分:35)

管理员中使用的message_user功能只使用contrib.messages包。你可以尝试这样的事情:

from django.contrib import messages

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

您还可以使用warningdebuginfosuccess代替error

希望有所帮助!

答案 1 :(得分:29)

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)

答案 2 :(得分:2)

不确定这是否在较新的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;

}

答案 3 :(得分:2)

您可以使用django.contrib.messages后端

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

这将显示错误消息和红色错误标志。