如何在表单有效时将上下文数据添加到 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()

这通常是一回事。

如果您想为新创建的对象做一些特殊的事情,您可以

  1. 重定向到不同的 URL,例如使用自定义 get_context_data 方法 and/or 模板名称的对象 DetailView 的子类。或者可能,在完全不同的地方。
  2. 询问新创建的对象(在模板 and/or get_context_data 方法中)以某种 application-specific 方式确定它确实是新创建的。