0

django-categoriesハードリンク(ForeignKey to )を使用して、アプリを使用して投稿がさまざまなカテゴリに分割されるアプリがありますcategories.Category

また、django-votingアプリを使用して、ユーザーが特定の投稿にvote_upまたはvote_downできるようにしています.

これで、ユーザーが投票していないリスト (ユーザー カテゴリのホワイトリスト)から最新の投稿を要求するビューがありCategories、それらは自分の投稿ではありません。DB クエリの負荷の観点から、これらの投稿を最も効率的な方法で取得するにはどうすればよいですか。

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

class Post(models.Model):
    published = models.DateTimeField(default=datetime.now)
    author = models.ForeignKey(User, blank=True, null=True,
                               verbose_name='author', 
                               related_name='author_post')
    caption = models.CharField(max_length="240")
    image = models.ImageField(upload_to='user_images')
    up_votes = models.PositiveIntegerField(default=0)
    down_votes = models.PositiveIntegerField(default=0)
    category = models.ForeignKey('categories.Category')

RAW DB クエリを使用して、現在ログインしているユーザーが投票しておらず、自分の投稿ではない投稿を時系列の逆順で取得する必要があります。

4

1 に答える 1

1

データベースによって異なります。の場合PosgtreSQLは、サブクエリで問題ありません。

voted_already = (Vote.objects.filter(user=…, 
                                     content_type=…)
                             .values_list('object_id', flat=True))
not_voted = (Post.objects.filter(category__in=…)
                         .exclude(author=…, 
                                  pk__in=voted_already)
                         .order_by('-published'))
于 2013-02-05T09:24:44.773 に答える