我在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
?
答案 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}