1

I want to add new field to queryset (by annotate()) according to request.user. I have following models:

class Tweet(models.Model):
    ...
    

class Like(models.Model):
    tweet = models.ForeignKey(Tweet, related_names='likes')
    user = models.ForeignKey(AUTH_USER_MODEL, related_name='my_likes')
    type = models.CharField(
        choices=(
            ('like', _"Like"), 
            ('dislike', "Dislike")
        ),
        ...
    )

Now I want to execute following query:

tweets = Tweet.objects.all().annotate(user_reaction=some_method(request.user))

And I want to this annotated_field(user_reaction), reaction of user to the tweet.
user_reaction has 3 states:
1- Like
2- Dislike
3- None (user hasn't like/dislike the tweet)

I want to have something like tweets[10].user_reaction, and after that get one of 3 states that came before. (just like, dislkie or None) How can I do this? thanks.

msln
  • 1,318
  • 2
  • 19
  • 38

1 Answers1

0

Cast some_method with Value()

tweets = Tweet.objects.all().annotate(user_reaction=Value(some_method(request.user)))