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"
一个更复杂的例子:
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView
from myapp.models import ComplicatedModel
class ComplicatedCreate(SuccessMessageMixin, CreateView):
model = ComplicatedModel
success_url = '/success/'
success_message = "%(calculated_field)s was created successfully"
def get_success_message(self, cleaned_data):
# cleaned_data is the cleaned data from the form which is used for string formatting
return self.success_message % dict(cleaned_data,
calculated_field=self.object.calculated_field)
从Django 1.6+开始,使用任何class-based generic views,都可以依赖successMessageMixin。只需将mixin添加到类定义并将
success_message
属性设置为所需的任何内容。正如奥利维尔德提到的,请记住在主模板中display messages!
来自docs的一个简单示例:
一个更复杂的例子:
您所要求的功能已经在Django通用视图中实现:
https://github.com/django/django/blob/1.2.X/django/views/generic/create_update.py#L115
您将在主模板中通过displaying messages看到这些消息。
据我所知,没有一种简单的方法可以使用传统的泛型视图来实现这一点。我一直觉得关于泛型视图的文档非常缺乏,因此从未使用过它们。
理论上,可以通过假设重定向意味着成功提交来使用decorator。
所以你可以写这样的东西(这些代码都没有经过测试):
url.py:
尽管如此,Django 1.3引入了class-based generic views,因此如果您对进入django1.3感兴趣,您应该研究一下这些。他们可能允许更多的定制,不确定。
从长远来看,我很少看到使用泛型视图的优点表单,而对于像add/update这样的东西,这一点就加倍了。
相关问题 更多 >
编程相关推荐