Django根据以前的查询选择数据库对象
问题描述:
我目前正在研究一个项目,其中有一种Twitter风格的方式,我一直无法弄清楚如何根据谁选择数据库中的'posts'用户正在关注。Django根据以前的查询选择数据库对象
我使用的是默认用户的功能,然后这是我下面的模型:
class Following(models.Model):
user = models.ForeignKey(User, related_name="user")
following = models.ForeignKey(User, related_name="following")
和我的职位型号:
class Post(models.Model):
title = models.CharField(max_length=100)
text = models.TextField()
user = models.ForeignKey(User)
date_time = models.DateTimeField(auto_now=True)
最后,从我的观点,我的片段试图让工作:
def home(request):
following = Following.objects.filter(user=request.user)
posts = Post.objects.filter(/*not sure what to put here*/)
我一直在尝试整夜得到这个工作,我不能REA只要看到一个解决方案,所以任何帮助都会很棒。
,如果有什么事,你可能需要看看,我没有张贴在这里,在github repository for this project is here
答
我的Django是生锈,但这里有云:
posts = Post.objects.filter(user__following__user=request.user)
+0
真棒,完美的工作! – H4Z3Y
答
from django.db import transaction
@transaction.commit_manually
def get_posts(following):
posts = []
for f in following:
posts.append(Post.objects.filter(user=f))
transaction.commit()
return posts
def home(request):
following = Following.objects.filter(user=request.user)
posts = get_posts(following)
如果我的理解你是否正确,也许你应该循环浏览视图中的“跟随”,并获取与每个用户相关的所有帖子。然后将结果附加到列表中。 – 2011-08-20 16:53:37
我认为这可能会起作用,但如果你跟随x人你必须做x sql查询,我认为这可能会对性能造成极大的不利影响。 – H4Z3Y
是的,但您也可以使用https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects中所述的Q对象进行复杂查找。我的意思是,循环“跟随”并创建一个Q查询。当你退出循环时,运行查询。 – 2011-08-20 17:00:47