代码之家  ›  专栏  ›  技术社区  ›  Roger

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

  •  17
  • Roger  · 技术社区  · 16 年前

    我想在管理员保存特定模型后向他们显示一条消息,类似于“Now enabletheseries”。

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

    有人知道怎么做吗?

    谢谢

    2 回复  |  直到 16 年前
        1
  •  47
  •   Community Mohan Dere    6 年前

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

    @达沃·卢西克指出了正确的解决办法。 message framework 这对你很有帮助。

    所以,假设您想在Django管理器中发出通知,每当您的汽车模型中的汽车对象更改所有者时,您可以执行以下操作:

    管理员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"))
    

    不用说你最好确保你添加的代码是真正安全的。

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

        2
  •  15
  •   Davor Lucic    16 年前

    save_model ModelAdmin 所以你可以 add message 使用 message framework 保存对象后。

        3
  •  2
  •   Muhammad Faizan Fareed    6 年前

    @请看答案是正确的,但它显示了@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')
    
    推荐文章