发表评论

时间:2020-10-05 16:37:11

标签: python python-3.x django

我创建了模型Post and Comment,现在我想显示Post的评论,但是有问题。在tutorial中,HTML {% for comment in post.comments.all %}中有一行代码,但是在我的应用中不起作用。如果我设置{% for comment in comments %},则可以使用,但是显示模型中的所有注释(我只希望帖子中的注释)。如何解决?下面我粘贴了代码。

models.py

from django.db import models


class Post(models.Model):
    title = models.CharField(max_length=64, blank=False, null=False)
    short_text = models.TextField(blank=False, null=False)
    text = models.TextField(blank=False, null=False)
    image = models.TextField(blank=False, null=False)
    date = models.DateTimeField(auto_now_add=True, blank=True)
    views = models.IntegerField(default=0)


class Comment(models.Model):
    post = models.ForeignKey('main.Post', on_delete=models.CASCADE)
    author = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(auto_now_add=True, blank=True)
    approved_comment = models.BooleanField(default=False)

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

    def __str__(self):
        return self.text

views.py

from django.shortcuts import get_object_or_404, render, redirect
from .models import Post, Comment


def index_pl(request):
    posts = Post.objects.all()
    return render(request, 'index_pl.html', {'posts': posts})


def single_article_pl(request, id):
    posts = get_object_or_404(Post, pk=id)
    posts.views = posts.views + 1
    posts.save()
    comments = Comment.objects.all()

    return render(request, 'single_article_pl.html', {'posts': posts, 'comments': comments})

html

{% 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 %}

admin.py

from django.contrib import admin
from .models import Post, Comment

admin.site.register(Post)
admin.site.register(Comment)

1 个答案:

答案 0 :(得分:1)

在教程中,HTML {% for comment in post.comments.all %}中有一行代码,但是在我的应用中不起作用。

这可能是因为他们在ForeignKeyComment的{​​{1}}中指定了related_name=… parameter [Django-doc],例如:

Post

# Option 1: set the related_name to 'comments' class Comment(models.Model): post = models.ForeignKey( 'main.Post', related_name='comments', on_delete=models.CASCADE ) # … reverse 中指定关系的名称,因此在这种情况下,访问给定related_name=…对象的Comment s。默认情况下,该值为Post,因此在这种情况下为model_name_set

因此,您可以指定一个相关名称;或者您可以访问comment_set管理器:

comment_set
相关问题