是否可以对这些模型执行单个复杂查询而不是执行多个查询?

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")

我需要从 PostUserProfile 中为每个具有 Post.user=Following.followFollowing.follower=request.user.idPost 获取数据。除此之外,我需要为每个 Post 捕获一个 SumLike.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')) 添加到您的查询中