【问题标题】:Django: customizing the message after a successful form saveDjango:成功保存表单后自定义消息
【发布时间】:2011-05-31 16:54:25
【问题描述】:

每当我在管理界面中保存模型时,它都会显示通常的“成功保存消息”。 但是,我想知道是否可以自定义此消息,因为我想警告用户他刚刚保存的内容以及这些操作的含义。

class PlanInlineFormset(forms.models.BaseInlineFormset):
    def clean(self):
        ### How can I detect the changes?  
        ### (self.changed_data doesn't work because it's an inline)
        ### and display what he/she just changed at the top AFTER the successful save?

class PlanInline(admin.TabularInline):
    model = Plan
    formset = PlanInlineFormset

【问题讨论】:

    标签: django django-forms django-admin django-messages


    【解决方案1】:

    Django(> 1.2 版)使用消息框架来处理管理消息。您可以使用该界面添加其他消息。这是一个例子:

    from django.contrib import messages
    
    class SomeModelAdmin(admin.ModelAdmin):
        # your normal ModelAdmin stuff goes here
    
        def save_model(self, request, obj, form, change):
            # add an additional message
            messages.info(request, "Extra message here.")
            super(SomeModelAdmin, self).save_model(request, obj, form, change)
    

    要检测正在保存的对象的更改,您应该覆盖ModelAdmin的save_model method,并将该方法传递的对象与数据库中当前的版本进行比较。要在内联的情况下执行此操作,您可以覆盖save_formset method。一种可能的方法可能看起来像(未经测试的代码):

    class SomeModelAdmin(admin.ModelAdmin):
        # your normal ModelAdmin stuff goes here
    
        def save_formset(self, request, form, formset, change):
            if not change:
                formset.save()
            else:
                instances = formset.save(commit=False)
    
                for instance in instances:
                    try:
                        # if you've got multiple types of inlines
                        # make sure your fetching from the 
                        # appropriate model type here
                        old_object = SomeOtherModel.get(id=instance.id)
                    except SomeOtherModel.DoesNotExist:
                        continue
    
                    if instance.field_x != old_object.field_x:
                        messages.info(request, "Something Changed")
    
                instance.save()
    
            formset.save_m2m()
    

    【讨论】:

    • 只是一个简单的问题,message.warning(..., '...') 仍然显示,就好像它仍然是一条正常的成功消息。有没有办法让它像引发异常错误一样变成 RED?
    【解决方案2】:

    如果您使用的是 Django 1.2 或更新版本,消息框架可能会提供答案。

    http://docs.djangoproject.com/en/dev/ref/contrib/messages/

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 2014-08-11
      • 1970-01-01
      相关资源
      最近更新 更多