繁体   English   中英

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

[英]How to show a message to a django admin after saving a model?

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

如果它是一个列表操作(message_user),我可以看到我将如何执行此操作,但我无法从主 CRUD 表单中看到如何执行此操作。

有谁知道怎么做?

谢谢。

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

@Davor Lucic 指出了正确的解决方案。 到今天为止,Django 附带了一个很酷的消息框架,在这方面有很大帮助。

因此,假设您想在 Car 模型中的汽车对象更改所有者时在 Django 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"))

无需说您最好确保您添加的代码是真正安全的。

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

您可以覆盖save_model上的ModelAdmin方法,以便在保存对象后使用消息框架添加消息

@Seether 的答案是正确的,但它显示了@Uday 在评论中提到的 2 条消息。

仅显示一条自定义消息

@Dylan 回答任何需要以更灵活的方式消除自动 Django 成功消息的人

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')

覆盖"save_model()" ,您可以设置和显示自定义消息,并且不要忘记导入"messages" ,如下所示:

from django.contrib import admin
from .models import MyModel
from django.contrib import messages # Here

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    # Here
    def save_model(self, request, obj, form, change):
        obj.save()
        messages.add_message(request, messages.INFO, 'Custom Message')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM