Как я могу перенаправить собственный url пользователя 'post-detail' в классе UpdateView...?

views.py

class PostUpdateView(LoginRequiredMixin , UpdateView):
        model =  Post
        template_name = 'blog/post_create.html'
        fields = ['title', 'content' ]
        # after post request url
        success_url = 'post-detail'

        def form_valid(self, form):
                form.instance.author = self.request.user
                return super().form_valid(form)
        
        def test_func(self):
                Post = self.get_object()
                if self.request.user == Post.author:
                    return True
                return False

этот 'success_url' не работает

мне нужно - чтобы пользователь после обновления своего поста перенаправлял данные своего поста page (this url :-"path('post/int:pk/', PostDetailview.as_view(), name='post-detail')")

urls.py

from django.urls import path
from .views import (
    PostListView,
    PostDetailview,
    PostCreateView,
    PostUpdateView,
    PostDeleteView,
    about
)

urlpatterns = [
    path('', PostListView.as_view(), name='home'),
    path('post/<int:pk>/', PostDetailview.as_view(), name='post-detail'),
    path('post/create', PostCreateView.as_view(), name='post-create'),
    path('post/<int:pk>/update', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/delete', PostDeleteView.as_view(), name='post-delete'),
    path('about/', about, name='about'),
]

Вот способ сделать это правильно:

class PostUpdateView(LoginRequiredMixin , UpdateView):
        model =  Post
        template_name = 'blog/post_create.html'
        fields = ['title', 'content' ]
        # after post request url
        # success_url = 'post-detail' comment this line
        def get_success_url(self):
            return reverse("post-detail", args=[pk]) # you can replace pk

Вы присваиваете пространство имен url (post-detail), а не url в success_url согласно документу django

https://docs.djangoproject.com/en/dev/ref/class-based-views/mixins-editing/#django.views.generic.edit.FormMixin.success_url

Мы должны назначить url, и это можно сделать, используя либо reverse, либо reverse_lazy

В соответствии с вашим url.py вы хотите перенаправить на страницу с деталями сообщения конкретного пользователя, для этого вам следует переопределить метод get_success_url, как упомянул Бичанна в своем сообщении.

def get_success_url(self):
    object_id = self.kwargs[self.pk_url_kwarg]
    return reverse_lazy('post-detail', kwargs={'pk': object_id})
Вернуться на верх