为什么在form_valid之后调用success_message(MessageMixin)?不应该在 save() 方法之后调用它吗



我正在Django中编写一个通用的CreateView,并使用文档中的这个示例。

from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView
from myapp.models import Author
class AuthorCreate(SuccessMessageMixin, CreateView):
    model = Author
    success_url = '/success/'
    success_message = "%(name)s was created successfully"

如果成功消息(名称)中的字段未处理并从表单中按原样保存,则此操作正常。如果我试图输出类似的东西

success_message = "%(id)s was created successfully"

其中我在Model上调用的自定义保存方法中处理保存id,它抛出一个关键错误。这不是很糟糕吗?成功消息不是应该在成功保存后创建,而不是form_valid吗?

成功消息的form_valid方法在实例保存后调用。但是,成功消息是使用表单的cleaned_data而不是模型实例构建的。这允许mixin与所有表单一起使用,而不仅仅是模型表单。

用于在基于类的视图中添加消息的Django文档解释了要做什么——覆盖get_success_message,而不是设置success_message属性。

class AuthorCreate(SuccessMessageMixin, CreateView):
    def get_success_message(self, cleaned_data):
        return "%(id)s was created successfully" % {'id': self.object.id}

相关内容

最新更新