是否可以对这些模型执行单个复杂查询而不是执行多个查询?
It is possible to do a single complex query on these models rather than doing multiple queries?
使用这些模型:
class User(AbstractUser):
pass
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="profile")
bio = models.CharField(max_length=250)
img = models.ImageField(upload_to='img_profiles/')
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="post")
text = models.CharField(max_length=260)
data = models.DateTimeField(auto_now_add=True)
class Following(models.Model):
follow = models.ForeignKey(User, on_delete=models.CASCADE, related_name="follow")
follower = models.ForeignKey(User, on_delete=models.CASCADE, related_name="follower")
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_that_like")
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="post_like")
我需要从 Post
、User
和 Profile
中为每个具有 Post.user=Following.follow
且 Following.follower=request.user.id
的 Post
获取数据。除此之外,我需要为每个 Post
捕获一个 Sum
的 Like.post
。
第一部分可以:
qs=Following.objects.values('follow__post__id','follow__post__text',
'follow__post__data','follow__username','follow__first_name','follow__last_name',
'follow__profile__img').filter(follower_id=request.user.id).order_by('-follow__post__data')
我想了解是否可以使用相同的查询获得第二部分,或者我是否需要第二个查询/子查询
I would like to understand if it is possible to obtain the second part
with the same query
可以用 annotation。
您可以导入计数 from django.db.models import Count
并将 .annotate(like_count=Count('follow__post__post_like'))
添加到您的查询中
使用这些模型:
class User(AbstractUser):
pass
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="profile")
bio = models.CharField(max_length=250)
img = models.ImageField(upload_to='img_profiles/')
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="post")
text = models.CharField(max_length=260)
data = models.DateTimeField(auto_now_add=True)
class Following(models.Model):
follow = models.ForeignKey(User, on_delete=models.CASCADE, related_name="follow")
follower = models.ForeignKey(User, on_delete=models.CASCADE, related_name="follower")
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_that_like")
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="post_like")
我需要从 Post
、User
和 Profile
中为每个具有 Post.user=Following.follow
且 Following.follower=request.user.id
的 Post
获取数据。除此之外,我需要为每个 Post
捕获一个 Sum
的 Like.post
。
第一部分可以:
qs=Following.objects.values('follow__post__id','follow__post__text',
'follow__post__data','follow__username','follow__first_name','follow__last_name',
'follow__profile__img').filter(follower_id=request.user.id).order_by('-follow__post__data')
我想了解是否可以使用相同的查询获得第二部分,或者我是否需要第二个查询/子查询
I would like to understand if it is possible to obtain the second part with the same query
可以用 annotation。
您可以导入计数 from django.db.models import Count
并将 .annotate(like_count=Count('follow__post__post_like'))
添加到您的查询中