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

+0

如果我的理解你是否正确,也许你应该循环浏览视图中的“跟随”,并获取与每个用户相关的所有帖子。然后将结果附加到列表中。 – 2011-08-20 16:53:37

+0

我认为这可能会起作用,但如果你跟随x人你必须做x sql查询,我认为这可能会对性能造成极大的不利影响。 – H4Z3Y

+0

是的,但您也可以使用https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects中所述的Q对象进行复杂查找。我的意思是,循环“跟随”并创建一个Q查询。当你退出循环时,运行查询。 – 2011-08-20 17:00:47

我的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)