success - django reverse_lazy
success_url en UpdateView, basado en el valor pasado (4)
¿Por qué no agrega un parámetro ''siguiente'' a su formulario (plantilla) y lo captura en su vista? Es una práctica común lograr redireccionar de esta manera.
¿Cómo puedo establecer success_url
basado en un parámetro?
Tengo muchas ganas de volver a donde vine, no a un lugar estático. En pseudo código:
url(r''^entry/(?P<pk>/d+)/edit/(?P<category>/d+)'',
UpdateView.as_view(model=Entry,
template_name=''generic_form_popup.html'',
success_url=''/category/%(category)'')),
Lo que significaría: editar la entrada pk
y luego regresar a ''categoría''. Aquí una entrada puede ser parte de múltiples categorías.
Cree una clase MyUpdateView
de UpdateView
y anule el método get_success_url
:
class MyUpdateView(UpdateView):
def get_success_url(self):
pass #return the appropriate success url
También me gusta pasar parámetros como template_name y model dentro de la vista de clase .as_view()
, pero no en .as_view()
en urls.py
Defina get_absolute_url(self)
en su modelo. Ejemplo
class Poll(models.Model):
question = models.CharField(max_length=100)
slug = models.SlugField(max_length=50)
# etc ...
def get_absolute_url(self):
return reverse(''poll'', args=[self.slug])
Si su PollUpdateView(UpdateView)
carga una instancia de ese modelo como object
, buscará de forma predeterminada un método get_absolute_url()
para averiguar a dónde redirigir después de la POST
. Entonces
url(r''^polls/(?P<slug>/w+)/, UpdateView.as_view(
model=Poll, template_name=''generic_form_popup.html''),
debería hacer.
Tenía el mismo problema. Fue capaz de obtener el parámetro de self.kwargs como mencionó Dima:
def get_success_url(self):
if ''slug'' in self.kwargs:
slug = self.kwargs[''slug'']
else:
slug = ''demo''
return reverse(''app_upload'', kwargs={''pk'': self._id, ''slug'': slug})