2015-07-11 95 views
0

我在我的Django应用程序是这样一些模型:查询Django的ORM额外的信息

我有一个Post实体:

class Post(models.Model): 
    .... 

而且LikePost实体保存已创建了一个喜欢的网友一个帖子。

class LikePost(models.Model): 
    # Author info 
    author_user = models.ForeignKey(User, null=True, related_name='post_likes') 

    post = models.ForeignKey(Post, related_name="likes") 
    dateJoined = models.DateTimeField(auto_now_add=True) 

我需要找回一些帖子:

Post.objects.filter(....)... 

,但每个帖子我也需要知道,如果当前用户已经进行的后一个类似的动作。

所以,我需要有一个查询检索后的列表,并为每个职位组的信息,我会还(附加字段'liked'= True|False例如)

我有注释这种额外的信息,以试图像'extra'函数,但是我没有在两个模型上使用它:在PostPost上查询和在LikePost上的额外信息。 这可能吗? 欢迎任何例子!

-------- ---------编辑

!我无法更改我的模型配置!

+0

你应该看看['ManyToManyField' ](https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/) – IanAuld

回答

1

我不会分开这两个模型。只是新的领域liked_by添加到邮政型号

class Post(models.Model): 
    user = models.ForeignKey(User, related_name='user_posts') 
    liked_by = models.ManyToMany(User, related_names='liked_posts') 

user_liked_posts = request.user.liked_posts.all() 

如果你不能改变的模型,然后:

user_liked_posts = request.user.post_likes.select_related('post') 
# likes on posts done by request.user 
# so "author_user" is request.user 
for like in user_liked_posts: 
    like.dateJoined 
    like.post.title 
+0

感谢您的回复...是的,这是一个很好的解决方案,但现在我可以' t改变我的模型:(我需要找到一个好的解决方案,我的模型配置,因为我已经解释.. – Safari

+0

@Safari我更新了我的答案 – doniyor

+0

好吧,但我的问题是不同的...我会有这样的信息,像额外的领域在我的查询集中。你的建议是我目前实施的。但我想直接在queryset结果(类似于.ANNOTATE或.EXTRA的Django ORM)中使用这些信息(例如字段like = True | False)...我想为了效率原因使用单个查询。 – Safari