Django ORM查询中的额外信息

时间:2015-07-11 16:37:35

标签: python django django-models django-orm

我的Django应用程序中有一些模型如下:

我有一个Post实体:

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

LikePost实体保存在帖子上创建了Like的用户。

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'功能,但我没有在两个模型上使用它:查询关于LikePost的帖子和额外信息。 有可能吗? 欢迎任何例子!

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

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

1 个答案:

答案 0 :(得分: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