如何在保存模型后向django管理员显示消息?

时间:2010-09-14 20:51:47

标签: django django-admin

我想在保存特定模型后向管理员显示一条消息,例如“现在启用该系列”。

如果它是一个列表操作(message_user),我可以看到我是如何做到的,但是我无法从主CRUD表单中看到如何做到这一点。

有谁知道怎么做?

由于

3 个答案:

答案 0 :(得分:38)

老问题,但值得至少一个小例子,因为我认为这是一个非常普遍的问题。

@Davor Lucic指出了正确的解决方案。 截至今天,Django发布了一个很酷的message framework,在这方面做了很多帮助。

所以,假设你想在汽车模型中的汽车对象改变所有者时在Django Admin中发出通知,你可以这样做:

<强> admin.py

from django.contrib import admin
from django.contrib import messages

from .models import Car


@admin.register(Car)
class CarAdmin(admin.ModelAdmin):
    list_display = ('owner', 'color', 'status', 'max_speed', )

    def save_model(self, request, obj, form, change):
        if 'owner' in form.changed_data:
            messages.add_message(request, messages.INFO, 'Car has been sold')
        super(CarAdmin, self).save_model(request, obj, form, change)

值得一提的是,如果您想在邮件中包含HTML标记,则必须添加:

from django.utils.safestring import mark_safe

允许您执行以下操作:

messages.add_message(request, messages.INFO, mark_safe("Please see <a href='/destination'>here</a> for further details"))

无需说你最好确保你添加的代码真的很安全。

没有什么特别的,但也许(并且希望)有人会发现它很有用。

答案 1 :(得分:14)

您可以在save_model上覆盖ModelAdmin方法,以便在保存对象后使用add message message framework

答案 2 :(得分:2)

@Seether答案是正确的,但它显示2条消息,如@Uday在评论中所述。

仅显示一条自定义消息

由@Dylan For anyone who needs to eliminate the automatic Django success message in a more flexible way

回答
from django.contrib import messages

class SomeAdmin(admin.ModelAdmin):
      def message_user(self, *args): # overridden method
            pass

      def save_model(self, request, obj, form, change):

          messages.add_message(request, messages.INFO, 'Custom message goes here')
相关问题