Как добавить контекстные данные в 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()
что обычно одно и то же.
Если вы хотите сделать что-то особенное для вновь созданного объекта, вы можете
- Перенаправьте на другой URL, например, на подкласс вашего объекта DetailView с пользовательским
get_context_dataметодом и/или именем шаблона. Или, возможно, в совершенно другое место. - Допросите вновь созданный объект (в шаблоне и/или методе get_context_data), чтобы установить каким-то специфическим для приложения способом, что он действительно создан.