get()返回了多个注释-返回了2

时间:2020-10-15 00:22:43

标签: django

我正在尝试添加新帖子,并且标题中出现错误代码。看来,当我单击带有评论的帖子时,它会显示详细信息页面,但如果有多个评论,则会出现错误。我认为这与我的详细信息视图有关。我一直在更改comment变量中的kwarg,并且遇到了不同的错误,这就是为什么我认为它与详细信息视图有关。

views.py

from django.shortcuts import render, get_object_or_404, redirect
from .models import Post, Comment
from django.utils import timezone
from .forms import PostForm



def post_index(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by("published_date")
    return render(request, "blog/post_index.html", {"posts" : posts})


def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    comment = get_object_or_404(Comment, post=post.pk)
    return render(request, "blog/post_detail.html", {"post" : post, "comment" : comment})


def post_create(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect("post_detail", pk=post.pk)
    else:
        form = PostForm()
        return render(request, "blog/post_create.html", {"form" : form})
    

models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=250)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title


class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
    author = models.CharField(max_length=250)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    approved_comment = models.BooleanField(default=False)

    def approve(self):
        self.approved_comment = True
        self.save()

    def __str__(self):
        return self.text

post_detail.html

{% extends 'blog/base.html' %}

{% block content %}
    <div class="post">
        {% if post.published_date %}
            <div class="date">
                {{ post.published_date }}
            </div>
        {% endif %}
        <h2>{{ post.title }}</h2>
        <p>{{ post.text|linebreaksbr }}</p>
    </div>
    <hr>
    
        {% for comment in post.comments.all %}
            <div class="comment">
                <div class="date">{{ comment.created_date }}</div>
                <strong>{{ comment.author }}</strong>
                <p>{{ comment.text|linebreaks }}</p>
            </div>
        {% empty %}
            <p>No comments here yet :(</p>
        {% endfor %}
    
{% endblock %}

1 个答案:

答案 0 :(得分:0)

不要使用get_object_or_404,它只会返回一个评论,而只是过滤出您的评论

1