如何在表单有效时将上下文数据添加到 Django CreateView
How to add context data to Django CreateView when form is valid
使用 Django,我有一个页面,其中包含使用 CreateView
呈现的表单。 success_url
与原始形式相同 url。当表单提交并有效时,我想在上下文中插入一些数据。
我想知道添加此上下文数据的最灵活、最清晰的方法,因为下面的示例(可行)对于此类(大概)常见任务而言感觉不是最佳选择。我正在寻找使用 SuccessMessageMixin
.
的更通用的解决方案
class DemoView(CreateView):
template_name = "request-demo.html"
form_class = DemoForm
success_url = reverse_lazy("base:demo")
def form_valid(self, form):
create_and_send_confirmation_email(form)
return self.render_to_response(self.get_context_data(success_message=True))
通常,您会将 succcess_url 定义为刚刚创建的对象的 DetailView。事实上,如果你根本不定义 success_url,默认的 get_success_url
将 return
url = self.object.get_absolute_url()
这通常是一回事。
如果您想为新创建的对象做一些特殊的事情,您可以
- 重定向到不同的 URL,例如使用自定义
get_context_data
方法 and/or 模板名称的对象 DetailView 的子类。或者可能,在完全不同的地方。
- 询问新创建的对象(在模板 and/or get_context_data 方法中)以某种 application-specific 方式确定它确实是新创建的。
使用 Django,我有一个页面,其中包含使用 CreateView
呈现的表单。 success_url
与原始形式相同 url。当表单提交并有效时,我想在上下文中插入一些数据。
我想知道添加此上下文数据的最灵活、最清晰的方法,因为下面的示例(可行)对于此类(大概)常见任务而言感觉不是最佳选择。我正在寻找使用 SuccessMessageMixin
.
class DemoView(CreateView):
template_name = "request-demo.html"
form_class = DemoForm
success_url = reverse_lazy("base:demo")
def form_valid(self, form):
create_and_send_confirmation_email(form)
return self.render_to_response(self.get_context_data(success_message=True))
通常,您会将 succcess_url 定义为刚刚创建的对象的 DetailView。事实上,如果你根本不定义 success_url,默认的 get_success_url
将 return
url = self.object.get_absolute_url()
这通常是一回事。
如果您想为新创建的对象做一些特殊的事情,您可以
- 重定向到不同的 URL,例如使用自定义
get_context_data
方法 and/or 模板名称的对象 DetailView 的子类。或者可能,在完全不同的地方。 - 询问新创建的对象(在模板 and/or get_context_data 方法中)以某种 application-specific 方式确定它确实是新创建的。