Estoy tratando de agregar un enlace "+ Nueva revisión" a una página en mi sitio de Django que lo llevará a una página 'uuid: pk/new_review/' que alberga un formulario para enviar una URL para una publicación específica. Actualmente estoy enfrentando problemas en los que el enlace se redirige a la misma página, y creo que el problema se debe a mi uso de get_absolute_url(), que todavía tengo problemas para entender.
urls.py
urlpatterns = [ path('<uuid:pk>/', ListingDetailView.as_view(), name = 'listing_detail'), path('<uuid:pk>/new_review/', NewReview.as_view(), name = 'new_review'), ]vistas.py
class ListingDetailView(LoginRequiredMixin, DetailView): model = Listing template_name = 'listing/listing_detail.html' context_object_name = 'listing_detail' login_url = 'account_login' class NewReview(LoginRequiredMixin, CreateView): model = Review template_name = 'listing/new_review.html' fields = ['review'] context_object_name = 'new_review' def form_valid(self, form): form.instance.user = self.request.user form.instance.listing_id = get_object_or_404(Listing, pk = self.kwargs['pk']) return super().form_valid(form)modelos.py
class Review(models.Model): listing_id = models.ForeignKey( Listing, on_delete=models.CASCADE, related_name='reviews', ) user = models.ForeignKey( get_user_model(), on_delete=models.CASCADE, ) review = models.TextField(max_length=5000) def __str__(self): return self.listing_id def get_absolute_url(self): return reverse('listing_detail', args=[str(self.listing_id)])listado_detalle.html
... <p><a href="{{ new_review.get_absolute_url }}">+ New Review</a></p2> ...El problema no es get_absolute_url en sí mismo: eso devolverá una cadena vacía, ya que no hay new_review en el contexto.
Deberías trabajar con:
<a href=" {% url 'new_review' pk=listing_detail.pk %} ">+ New Review</a>