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

时间:2015-04-08 17:53:13

标签: python django

我在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"

我在自定义保存方法中处理保存ID我在模型上调用, 它抛出一个关键错误。 这不是坏事吗?成功保存后不应创建成功消息而不是form_valid

1 个答案:

答案 0 :(得分:0)

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

adding messages in Class Based Views的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}