Невозможно отобразить заголовок сообщения на странице удаления комментария - PullRequest
0 голосов
/ 17 мая 2019

на сайте моего сообщества есть объекты публикаций, и к ним могут относиться комментарии.У меня есть дополнительный шаблон для удаления комментариев, в котором я хочу отображать заголовок сообщения в «сухих» страницах, но по некоторым причинам я не могу отобразить заголовок, как только я установил объект сообщения в контексте views.py, любой намек будетполезно.Что я тут не так делаю?

views.py

def comment_delete(request, pk):
    comment = get_object_or_404(Comment, pk=pk)
    post = get_object_or_404(Post, pk=pk)
    if request.user == comment.author:
        if request.method == 'POST':
            comment.delete()
            messages.success(request, 'You have successfully deleted the comment.')
            return redirect('post_detail', pk=comment.post.pk)
        else:
            template = 'app/Post/post_comment_delete.html'
            form = CommentForm(instance=comment)
            context = {
                'comment': comment,
                'form': form,
                'post': post
            }
            return render(request, template, context)
    else:
        messages.warning(request, 'Comment could not be deleted.')
        return redirect('post_detail', pk=comment.post.pk)

template.html:

<a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }} </a>

models.py

class Comment(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    content = models.TextField(max_length=500)
    published_date = models.DateField(auto_now_add=True, null=True)

Ответы [ 3 ]

1 голос
/ 17 мая 2019

Похоже, вы используете один и тот же первичный ключ как для публикации, так и для комментария.

def comment_delete(request, pk):
    comment = get_object_or_404(Comment, pk=pk)
    post = get_object_or_404(Post, pk=pk)

Вы уверены, что это правильно? Если вы вызовете эту функцию с pk = 1, она получит комментарий и сообщение с идентификатором 1, возможно, нет сообщения с таким идентификатором?

EDIT: Если у вас есть сообщение, на которое есть ссылка в вашем комментарии, доступ к нему осуществляется следующим образом:

def comment_delete(request, pk):
    comment = get_object_or_404(Comment, pk=pk)
    post = comment.post
0 голосов
/ 17 мая 2019

Решение, полученное из вышеуказанных ответов:

def comment_delete(request, pk):
    comment = get_object_or_404(Comment, pk=pk)
    post = comment.post
    if request.user == comment.author:
        if request.method == 'POST':
            post = Post.objects.get(pk=comment.post.pk)
            comment.delete()
            messages.success(request, 'You have successfully deleted the comment.')
            return redirect('post_detail', pk=post.pk)
        else:
            template = 'app/Post/post_comment_delete.html'
            form = CommentForm(instance=comment)
            context = {
                'comment': comment,
                'post': post,
                'form': form

            }
            return render(request, template, context)
    else:
        messages.warning(request, 'Comment could not be deleted.')
        return redirect('post_detail', pk=comment.post.pk)

большое спасибо за вашу помощь!

0 голосов
/ 17 мая 2019

Как только вы удалили свой комментарий, вы не сможете получить доступ к полям удаленного экземпляра, если вам нужен доступ к pk 'post', связанному с экземпляром удаленного комментария, возможно, вы могли бы перебрать экземпляр 'post' перед удалением комментария :

if request.method == 'POST':
    related_post = Post.objects.get(pk=comment.post.pk)
    comment.delete()
    messages.success(request, 'You have successfully deleted the comment.')
    return redirect('post_detail', pk=related_post.pk)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...