Как я могу перенаправить собственный 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})