0

これらは私のモデルです:

class Comment(models.Model):

    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField(_('object ID'))
    content_object = generic.GenericForeignKey()
    user = models.ForeignKey(User)
    comment = models.TextField(_('comment'))


class Post(models.Model):

    title = models.CharField(_('name'), max_length=80)         
    creator = models.ForeignKey(User, related_name="created_posts")
    created = models.DateTimeField(_('created'), default=datetime.now)
    body = models.TextField(_('body'), null=True, blank=True)

今私のviews.pyで私はこのistructionで投稿を取得します:

    post = get_object_or_404(Post, id=id)

私のviews.pyのこの時点で、その投稿のすべてのコメントを取得するための(ORMを使用した)最も効率的なクエリは何ですか?

4

1 に答える 1

3

comments = generic.GenericRelation(Comment)投稿からコメントに簡単にアクセスできるように、投稿で定義する必要があります。それが済んだら、それは単純な後方関係です。

comments = post.comments.all()

これは実際には効率の問題ではないことに注意してください。後方汎用関係を介してすべての関連アイテムを取得すると、常に最大2つのクエリが発生します。1つは関連するContentTypeを取得し、最初のルックアップで自動的にキャッシュされ、もう1つは実際のアイテムを取得します。

複数の投稿に対するすべてのコメントをできるだけ効率的に取得する方法を尋ねられた場合は、優れたテクニックについてブログを紹介しますが、そうでないので、それは単なるブログの娼婦になるからです。

于 2010-05-21T13:10:49.500 に答える