详解Django的 form_valid_message() 函数:返回表单验证成功后的消息

  • Post category:Python

form_valid_message()函数是Django框架中提供的一个方法,用于自定义表单提交成功后的消息内容。

使用form_valid_message()函数的前提是,定义了一个基于FormViewModelFormMixin视图类的表单视图,并在其中实现了表单验证函数form_valid()

form_valid_message()函数的默认行为是生成一条消息,该消息会在重定向到新页面后被呈现。默认情况下,消息的内容是“表单已提交成功”。

我们可以通过覆盖form_valid_message()函数来自定义消息内容。在自定义函数中,我们可以使用self.object引用最近提交并成功保存到数据库中的模型实例。

以下是一个简单的例子:

from django.contrib.messages.views import SuccessMessageMixin
from django.urls import reverse_lazy
from django.views.generic.edit import CreateView
from .models import MyModel

class MyView(SuccessMessageMixin, CreateView):
    model = MyModel
    fields = ['field1', 'field2', 'field3']
    success_url = reverse_lazy('my-view')

    def form_valid(self, form):
        self.object = form.save()
        return super().form_valid(form)

    def form_valid_message(self):
        return f"使用 '{self.object.field1}' 创建成功!"

在这个例子中,我们继承了SuccessMessageMixin,这个混合类提供了一个默认的form_valid_message()函数行为,会在表单提交成功后生成消息“ 已提交成功。”。

我们在基于SuccessMessageMixin的基础上自定义了form_valid_message()函数。这个函数通过self.object引用了最近提交并成功保存到数据库中的对象,然后生成了一个消息字符串。

另一个例子,请看下面这个视图:

from django.contrib.messages.views import SuccessMessageMixin
from django.urls import reverse_lazy
from django.views.generic.edit import UpdateView
from .models import MyModel

class MyView(SuccessMessageMixin, UpdateView):
    model = MyModel
    fields = ['field1', 'field2', 'field3']
    success_url = reverse_lazy('my-view')

    def form_valid(self, form):
        self.object = form.save()
        return super().form_valid(form)

    def form_valid_message(self):
        return "更新已保存。"

在这个例子中,我们同样继承了SuccessMessageMixin,定义了一个基于模型表单的更新视图。

默认情况下,这个更新视图会生成一条消息“ 已更新。”,我们通过覆盖form_valid_message()函数,定义了不同的消息内容“更新已保存”。这样就可以输出我们自定义的成功消息。

总之,可以通过自定义form_valid_message()函数,来定制表单提交成功后的提示消息,以便于更好地反馈给用户表单提交的状态和结果。