Stack Overflow Asked by Roman Safonov on December 15, 2020
I have a Post model:
class Post(models.Model, NiceTextPrintMixin):
text = models.TextField()
pub_date = models.DateTimeField("date published",
auto_now_add=True,
db_index=True)
author = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name="posts")
group = models.ForeignKey(Group,
on_delete=models.SET_NULL,
blank=True,
null=True,
related_name="posts",
)
image = models.ImageField(upload_to='posts/', blank=True, null=True)
and a Like model:
class Like(models.Model):
post = models.ForeignKey(Post,
on_delete=models.CASCADE,
blank=False,
null=False,
related_name="likes")
user = models.ForeignKey(User,
on_delete=models.CASCADE,
blank=False,
null=False,
related_name="likes")
value = models.IntegerField()
What i need is to annotate a field to a Post queryset that would contain a ‘value’ value from a Like model where the post_id=corresponding post_id and user=request.user if such a record exists and 0 (None is also fine) if it doesn’t. Is there a way to get that done in a simple annotate way ?
Maybe try this
from django.db.models import Count, Case, When, IntegerField
posts_wth_like = Post.objects.all().annotate(count_like=Count(Case(When(likes__user=user, then=1),output_field=IntegerField(),)))
If user have like = 1 , else 0
Answered by Boris Golubkov on December 15, 2020
You can't pass arguments in @property. You can implement method for Post:
def get_like_value(user):
try:
like = Like.objects.get(user = user, post = self,)
return like.value
catch Like.DoesNotExist:
return 0
Answered by Boris Golubkov on December 15, 2020
1 Asked on December 30, 2021 by var_the_an
1 Asked on December 30, 2021 by aquamad96
0 Asked on December 30, 2021 by swayamjeet-swain
2 Asked on December 30, 2021 by andy-williams
3 Asked on December 30, 2021 by callum-brown
3 Asked on December 30, 2021 by sshaikh
2 Asked on December 30, 2021 by user11035198
4 Asked on December 30, 2021 by user11247496
3 Asked on December 30, 2021
2 Asked on December 30, 2021 by yponde
1 Asked on December 30, 2021 by saksh
1 Asked on December 30, 2021 by abhay
9 Asked on December 30, 2021 by brandon-cornelio
2 Asked on December 30, 2021
3 Asked on December 30, 2021 by kim-stacks
Get help from others!
Recent Answers
© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP