#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.