Referenciando un parámetro desde un modelo relacionado para pasarlo a get_success_url en DeleteView

Pregunta de la clase:
Bernardo Augusto García Loaiza

Bernardo Augusto García Loaiza

Pregunta
studenthace 7 años

Tengo este modelo relacionado con mi esquema de usuarios:

<code> class EntrepreneurshipOffer(models.Model): created_by = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE ) ...

Además tengo una vista llamada

EntrepreneurshipOffersByUser
la cual me permite listar todas las ofertas que un usuario ha creado o que son de su propiedad:

<code> class EntrepreneurshipOffersByUser(LoginRequiredMixin, UserProfileDataMixin, ListView): template_name = 'entrepreneurship/my_entrepreneurship_offer_list.html' def get_queryset(self, *args, **kwargs): user = self.request.user queryset_list = EntrepreneurshipOffer.objects.filter(created_by__username=user.username) return queryset_list def get_context_data(self, **kwargs): context = super(EntrepreneurshipOffersByUser, self).get_context_data(**kwargs) user = self.request.user entrepreneurship_offers = EntrepreneurshipOffer.objects.filter(created_by__username=user.username) context['offers_by_user'] = entrepreneurship_offers return context

Los

URLs
para detallar mis
EntrepreneurshipOffer
son estos

<code> # Main URL which call to Entrepreneurship Offer URLs url(r'^offer/entrepreneurship/', include('entrepreneurship.urls', namespace='offer')), # List Entrepreneurship Offer's user url(r'^by/u/(?P<username>[-\w]+)/$', EntrepreneurshipOffersByUser.as_view(), name='list'), ]

Mi pregunta esta relacionada con lo siguiente: Quiero borrar un objeto

EntrepreneurshipOffer
y después, ser redireccionado al listado de objetos
EntrepreneurshipOffer
mostrado anteriormente

Para esto, tengo la vista basada en clase

EntrepreneurshipOfferDeleteView
la cual con el método
get_success_url
llamo al URL que lista mis objetos
EntrepreneurshipOffer
pasando el namespace y el url name que he descrito anteriormente, referenciando además el parámetro username que es el que necesito pasarle al
reverse_lazy

<code> class EntrepreneurshipOfferDeleteView(SuccessMessageMixin, UserProfileDataMixin, LoginRequiredMixin, DeleteView): model = EntrepreneurshipOffer #success_url = reverse_lazy("offer:list") success_message = "Oferta de emprendimiento eliminada con éxito" def get_success_url(self): entrepreneurship_offer = self.get_object() #print(entrepreneurship_offer) return reverse_lazy("offer:list", kwargs={'created_by': entrepreneurship_offer.created_by.username})

Necesito pasar el parámetro

username
, pero al parecer no lo estoy haciendo de la manera adecuada porque a pesar de que el valor del campo
username
es adicionado en este proceso a través de
self.get_object()
, obtengo este error:

<code> NoReverseMatch at /offer/entrepreneurship/modelo-de-negocio/delete/ Reverse for 'list' with arguments '()' and keyword arguments '{'created_by': 'bgarcial'}' not found. 1 pattern(s) tried: ['offer/entrepreneurship/by/u/(?P<username>[-\\w]+)/$']

Estoy aprendiendo a mirar como funcionan las vistas basadas en clase, estoy seguro que existe una forma obvia de hacer lo que describo acá, pero no ha le encontrado.

Cualquier ayuda es altamente apreciada.

1 respuestas
para escribir tu comentario
    Diego Alexander Forero Higuera

    Diego Alexander Forero Higuera

    Team Platzihace 7 años

    Simplemente en tu kwars cambia created_by por username

    return reverse_lazy("offer:list", kwargs={'username': entrepreneurship_offer.created_by.username})

    Otra cosa que te recomiendo viendo el código es que no tienes que usar el lookup para llegar al username, ya que created_by es de tipo usuario basta con hacer esto

    entrepreneurship_offers = EntrepreneurshipOffer.objects.filter(created_by=user)
Curso de Django online | David Toca | 2017

Curso de Django online | David Toca | 2017

En el curso de Django aprenderás a desarrollar aplicaciones de una forma rápida, en este curso veremos el desarrollo de un e-commerce haciendo uso de todas las herramientas que este framework posee.

Curso de Django online | David Toca | 2017
Curso de Django online | David Toca | 2017

Curso de Django online | David Toca | 2017

En el curso de Django aprenderás a desarrollar aplicaciones de una forma rápida, en este curso veremos el desarrollo de un e-commerce haciendo uso de todas las herramientas que este framework posee.