У меня проблема с перенаправлением пользователей в django

#python #html #django

Вопрос:

Я новичок, и я создаю форум с использованием html, css, начальной загрузки, python и django. Я создал представление для удаления записей:

  class DeletePost(DeleteView):
     model = Post
     success_url = '/'

    def get_queryset(self):
        queryset = super().get_queryset()
        return queryset.filter(author_post_id=self.request.user.id)

 

Когда пользователь нажмет кнопку «Подтвердить», когда ему нужно будет удалить сообщение, я хотел бы перенаправить его на ту же страницу обсуждения, на которой была запись, которую он удалил, но я не знаю, как это сделать.
Кто-нибудь может помочь? Заранее спасибо.

Почтовая модель:

 class Post(models.Model):
    post_author = ForeignKey(User, on_delete=models.CASCADE, related_name='posts')
    content = models.TextField(default="Your content here...")
    creation_date = DateTimeField(auto_now_add=True)
    discussion = ForeignKey(Discussion, on_delete=models.CASCADE)

    def __str__(self):
        return self.post_author.username

    class Meta:
        verbose_name = 'Post'
        verbose_name_plural = 'Posts'
 

Url-адреса:

URL-адрес обсуждения:

 path('discussion/<int:pk>', views.view_discussion, name='view_discussion')
 

URL-адрес DeleteView:

 path('discussion/<int:id>/delete_post/<int:pk>/', views.DeletePost.as_view(), name='delete_post')
 

Комментарии:

1. Можете ли вы указать URL-адрес своей страницы обсуждения, на которой была удалена запись. Вероятно, вам также следует поделиться соответствующими частями Post модели.

2. Да, вот они

Ответ №1:

Вы можете переопределить get_success_url с помощью:

 class DeletePost(DeleteView):
     model = Post

    def get_queryset(self):
        return super().get_queryset().filter(
            author_post_id=self.request.user.id
        )

    def get_success_url(self):
        return reverse('view_discussion', kwargs={'pk': self.object.discussion_id}) 

Комментарии:

1. Большое вам спасибо, это прекрасно. Я заменил » id «только на «pk», чтобы настроить его в соответствии с моим URL-адресом.

2. @Klebe: ага… да, это была ошибка. Обновленный. Спасибо.

Ответ №2:

Вы можете использовать метод «перенаправление» в Django.

Сначала импортируйте его: from django.shortcuts import redirect

затем напишите одну строку кода : return redirect('/nameOfURL') под вашими представлениями на основе классов/функций.

Обновить :

 def delete_post(request, id):
if request.method == 'POST':
    pi = Post.objects.get(pk=id)
    pi.delete()
    return redirect('/view_discussion')
 

Комментарии:

1. Хорошо, но есть много дискуссий, не только одна. Итак, как я могу перенаправить пользователя на конкретное обсуждение, в котором был удален пост?

2. Я обновил и написал представление на основе функций. Посмотрим, может ли это вам помочь. В обновлении, если сообщение будет удалено. Он будет перенаправлен на URL-адрес view_discussion.