success_url success reverse_lazy create django django-class-based-views

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})