[英]How to annotate a value from a related model in Django
我有一個帖子 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)
和一個贊 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()
我需要的是將一個字段注釋為 Post 查詢集,該查詢集將包含來自 Like model 的“值”值,其中 post_id=corresponding post_id 和 user=request.user 如果存在這樣的記錄,則為 0(無也可以)它沒有。 有沒有辦法以簡單的注釋方式完成這項工作?
您不能在@property 中傳遞 arguments。 您可以為 Post 實現方法:
def get_like_value(user):
try:
like = Like.objects.get(user = user, post = self,)
return like.value
catch Like.DoesNotExist:
return 0
也許試試這個
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(),)))
如果用戶喜歡 = 1,否則為 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.