[英]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.