在 Django Admin 中保存模型之前显示警报消息

Posted

技术标签:

【中文标题】在 Django Admin 中保存模型之前显示警报消息【英文标题】:Showing Alert Message Before Saving Model in Django Admin 【发布时间】:2018-01-17 23:15:21 【问题描述】:

有一些方法可以在模型保存到数据库后显示消息,或者如果保存时出现任何错误。但是,当用户单击 Django Admin 中的 save 按钮时,如何显示警报?有没有办法做到这一点?

【问题讨论】:

唯一的方法是使用 javascript 甚至更好的 jQuery,Django Admin already provides 为您服务。 【参考方案1】:

如果您浏览过 django 管理员,那么您会看到 django 使用 submit_line.html 来呈现保存(保存和继续)按钮。

有多种方法可以做到,

1) 如果您想要应用明智的警报,那么在您的 admin.py 文件中包含带有管理媒体选项的自定义 js 文件,

@admin.register(Model)
class ModelAdmin(admin.ModelAdmin):
   class Media:
        js = (
            'js/myscript.js',  # project's static folder ( /static/js/myscript.js )
        )

在你的myscript.js写下,

window.addEventListener("load", function () 
(function ($) 
    $('form').submit(function () 
        var c = confirm("continue submitting ?");
        return c;
    );


)(django.jQuery);

); 2 ) 如果你想在 admin 中的所有表单的警报,只需继承 templates/admin/submit_line.html 目录中的 submit_line.html 并简单地编写,

<script>
    $(document).ready(function()
        $('form').submit(function() 
            var c = confirm("continue submitting ?");
            return c;
        );
    )
</script>

【讨论】:

你能把你的答案与一些来源联系起来吗? 链接到媒体表单docs.djangoproject.com/en/3.1/topics/forms/media/… 有没有办法在confirm中添加css?【参考方案2】:

但是当用户点击 Django 中的保存按钮时如何显示警报 行政?有没有办法做到这一点?

它叫做validation。 Django 最佳实践是在服务器上进行验证,这种方式描述为in the docs。

您需要执行以下步骤:

    在你的管理模型中设置form。 在您的新表单中定义clean_name 方法,其中name 是您要检查的字段的名称。您还可以覆盖整个clean。 如果出现错误,则引发ValidationError 以向用户发送消息。如果您在clean_name 方法中引发异常name 字段将在界面中突出显示。

from django.core.exceptions import ValidationError
from django import forms
from django.contrib import admin


class ArticleAdmin(admin.ModelAdmin):
    form = MyArticleAdminForm


class MyArticleAdminForm(forms.ModelForm):
    def clean_name(self):
        if some_condition:
            raise ValidationError("Message which you want to show to the user")
        return self.cleaned_data["name"]

【讨论】:

以上是关于在 Django Admin 中保存模型之前显示警报消息的主要内容,如果未能解决你的问题,请参考以下文章

在 Django Admin 中使用 DateTimeField 保存模型实例会丢失微秒分辨率

在django admin中使用完整日历;将外部拖动的项目保存到模型

django:显示组用户数为admin

在 django admin 上编辑实际对象之前保存相关对象

django 内联覆盖保存

如何在 django admin 中显示多个模型的更改列表?