Как добавить контекстные данные в Django CreateView, когда форма действительна

Используя 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 будет возвращаться

url = self.object.get_absolute_url()

что обычно одно и то же.

Если вы хотите сделать что-то особенное для вновь созданного объекта, вы можете

  1. Перенаправьте на другой URL, например, на подкласс вашего объекта DetailView с пользовательским get_context_data методом и/или именем шаблона. Или, возможно, в совершенно другое место.
  2. Допросите вновь созданный объект (в шаблоне и/или методе get_context_data), чтобы установить каким-то специфическим для приложения способом, что он действительно создан.
Вернуться на верх