2

Djangoでコメント数と一緒に投稿を表示したい。私は現在、投稿モデルのように投稿のコメント数を持っていませんcomment_count。モデルのようなものを入れなくても、投稿にコメントがいくつあるかを示すモデル関数を書くことができると考えていました。

ここに私の投稿モデルがあります:

class Post(models.Model):
    user = models.ForeignKey(User, unique=False)
    headline = models.CharField(max_length=400, verbose_name="post headline")
    type = models.CharField(max_length=4)
    branch = models.ForeignKey(Branch, verbose_name="branch name", validators=[branch_exists])
    upvotes = models.IntegerField()
    is_starred = models.BooleanField()
    url_title = models.SlugField()
    creation = models.DateTimeField()
    thumbnail = models.URLField(blank=True)
    body = models.TextField(max_length=90000, blank=False)
    link = models.URLField(blank=False, verbose_name="your link URL")

    def __unicode__(self):
        return u"`%s' posted by %s at %s\n" % (self.headline, self.user, self.creation)

そして、ここに私のコメントモデルがあります:

class Comment(models.Model):
    user = models.ForeignKey(User, unique="False")
    time = models.DateTimeField()
    upvotes = models.IntegerField()
    post = models.ForeignKey(Post, unique="False")
    formatting = models.BooleanField(verbose_name="Format comment?")
    text = models.TextField(max_length=9000, blank=False)
    anonymous = models.BooleanField(verbose_name="Post comment anonymously?")

私は次のようなことをしたい:

def __unicode__(self):
    return u"`%s' posted by %s at %s with %s comments" % (self.headline, self.user, self.creation, self.comment_count)

ただし、comment_count フィールドはありません。投稿と一緒にデータベースからコメントの数を取得したい。

4

2 に答える 2

4

注釈... どうやら Django の最高の秘密:

from django.db.models import Count
Post.objects.annotate(comment_count=Count('comment'))

次に、各インスタンスには、comment_count使用できる属性があります。

于 2012-08-03T16:57:09.847 に答える
1

属性を使用して、投稿に関連付けられたコメントにアクセスできcomment_setます (これがデフォルトです。モデルのForeignKey に設定related_nameした場合は、別のものにすることができます)。カウントを取得するには、 を使用します。postCommentself.comment_set.count()

Django のドキュメントには、これに関するセクションがあります

于 2012-08-03T16:55:44.213 に答える