Reputation: 11935
I have some models in my Django application like this:
I have a Post
entity:
class Post(models.Model):
....
And LikePost
entity to save the users that has created a Like on a post.
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)
I need to retrieve some Post:
Post.objects.filter(....)...
but for each Post I need also to know if the current user has already performed a like action on the post.
So, I need to have a query to retrieve the list of post and for each post set info I would to annotate also this extra info (for example an additional field 'liked'= True|False
)
I have to tried something like 'extra
' function but I failed to use this on two model: query on Post and extra info on LikePost.
Is possible this?
Any examples is welcome!
-------- EDIT ---------
!! I can't change my models configuration !!
Upvotes: 0
Views: 205
Reputation: 37876
I would not separate these two models. Just add new field liked_by
to Post Model
class Post(models.Model):
user = models.ForeignKey(User, related_name='user_posts')
liked_by = models.ManyToMany(User, related_names='liked_posts')
and
user_liked_posts = request.user.liked_posts.all()
If you cannot change models, then:
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
Upvotes: 1