簡體   English   中英

提交評論后重定向到帖子

[英]Redirect after comment submission to post

我正在嘗試將我的評論表單提交重定向到應該顯示所有評論的帖子詳細信息頁面。 如何將評論相關的帖子的唯一 ID 傳遞到我的 URL 以重定向到該帖子?

post_detail.html

...
  <p><a href="{% url 'comment_new' comment.post.pk %}">Create New Comment</a> 
...

網址.py

...
    path('comment_new/', views.CommentCreateView.as_view(), name = 'comment_new'),
    path('<int:pk>/', views.PostDetailView.as_view(), name = 'post_detail'),
...

視圖.py

...
class CommentCreateView(LoginRequiredMixin, CreateView):
    model = Comment
    template_name = 'comment_new.html'
    form_class = CreateCommentForm
    login_url = 'login'

    def form_valid(self,form):
        form.instance.author = self.request.user
        return super().form_valid(form)
...

model.py

...
class Comment(models.Model):
    post = models.ForeignKey(
        Post, 
        on_delete = models.CASCADE,
        related_name = 'comments'
    )
    comment = models.CharField(max_length = 280)
    author = models.ForeignKey(
        get_user_model(),
        on_delete = models.CASCADE,
    )

    def __str__(self):
        return self.comment

    def get_absolute_url(self):
        return reverse('post_detail', args = [str(self.post.id)])
...

更新 2

按照 NKSM 的說明,我可以創建一個 url 鏈接到評論所指的帖子,但我在提交時收到此錯誤。

沒有要重定向到的 URL。 提供 url 或在 Model 上定義 get_absolute_url 方法。

視圖.py

class CommentCreateView(LoginRequiredMixin, CreateView):
    model = Comment
    template_name = 'comment_new.html'
    form_class = CreateCommentForm
    login_url = 'login'

    def form_valid(self,form):
        form.instance.author = self.request.user
        form.instance.post_id = self.kwargs.get('pk')
        return super().form_valid(form)

post_pk參數添加到您的路徑:

path('comment_new/<int:post_pk>/', views.CommentCreateView.as_view(), name='comment_new'),

然后使用get_success_url重定向到帖子:

def get_success_url(self):
    return reverse('post_detail', args=(self.kwargs.get("post_pk"),))

form_valid()的默認實現只是簡單地重定向到get_success_url( )。

您還可以在form_valid方法中添加您的帖子以發表評論:

def form_valid(self,form):
    form.instance.author = self.request.user
    form.instance.post_id = self.kwargs.get("post_pk")
    return super().form_valid(form)

更新

你的urls.py

...
path('comment_new/<int:post_pk>/', views.CommentCreateView.as_view(), name = 'comment_new'),
path('<int:pk>/', views.PostDetailView.as_view(), name = 'post_detail'),
...

你的意見.py

class CommentCreateView(LoginRequiredMixin, CreateView):
    model = Comment
    template_name = 'comment_new.html'
    form_class = CreateCommentForm
    login_url = 'login'

    def form_valid(self,form):
        form.instance.author = self.request.user
        form.instance.post_id = self.kwargs.get('post_pk')
        return super().form_valid(form)
 
    def get_success_url(self):
        return reverse('post_detail', args=(self.kwargs.get("post_pk"),))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM