如何在保存模型后向Django管理员显示消息?
我想在管理员保存某个特定模型后显示一条消息,比如“现在启用系列”。
我知道如果是列表操作(message_user),我该怎么做,但我不知道如何从主CRUD表单中做到这一点。
有没有人知道怎么做?
谢谢。
4 个回答
10
@Seether 的回答是对的,但正如 @Uday 在评论中提到的,它会显示两条消息。
只显示一条自定义消息
由 @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')
17
你可以在 save_model
方法上进行修改,这个方法是在 ModelAdmin
里。这样的话,你就可以在保存你的对象之后,使用 消息功能 来 添加消息。
74
这个问题虽然老旧,但我觉得还是值得分享一个小例子,因为这个问题挺常见的。
@Davor Lucic 提出了正确的解决方案。现在,Django 提供了一个很不错的 消息框架,这对解决这个问题很有帮助。
比如说,你想在 Django 管理后台中,当你的 Car 模型里的汽车对象更换车主时,给出一个通知,你可以这样做:
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"))
当然,确保你添加的代码是非常安全的,这一点是非常重要的。
这些内容并没有什么特别之处,但也许(希望如此)会对某些人有帮助。