我编写了自定义管理操作,基本上对模型中的某些字段执行QuerySet.update()
。有些时候不应该允许这些操作完成 - 相反,它们应该显示错误而不做任何事情。我试过了message_user
,但是显示了一个绿色的复选标记,而我希望它显示Django管理错误信息。
我在网上找到的解决方案是使用ModelForm
,但我不认为这适用于这种情况,因为这一切都发生在管理员更改列表页面上。
答案 0 :(得分:35)
管理员中使用的message_user
功能只使用contrib.messages
包。你可以尝试这样的事情:
from django.contrib import messages
# Then, when you need to error the user:
messages.error(request, "The message")
您还可以使用warning
,debug
,info
和success
代替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')
这将显示错误消息和红色错误标志。