我有一个应用程序,可以使用django-categories应用程序将帖子分成不同的类别,使用硬链接(ForeignKey到categories.Category)。
我还使用django-voting应用程序来允许用户vote_up或vote_down某些帖子。
现在我有一个视图,我需要从Categories (用户类别白名单)列表中获得用户尚未投票的最新帖子,这些帖子不是他自己的帖子。从DB查询负载的角度来看,如何以最有效的方式获取这些帖子。
这是我的Post模型:
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')我是否应该使用原始数据库查询来以反时间顺序获取帖子,其中当前登录的用户没有投票,并且这些帖子不是他自己的帖子。
发布于 2013-02-05 17:24:45
取决于你的数据库。如果是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'))https://stackoverflow.com/questions/14701802
复制相似问题