Django queryset语法使用WHERE IN子句

Django queryset语法使用WHERE IN子句,django,Django,我可以通过queryset电话寻求帮助。以下是模型: class User(AbstractUser): pass class Post(models.Model): posterID = models.ForeignKey("User", on_delete=models.CASCADE, related_name="post") content = models.TextField(blank=False)

我可以通过queryset电话寻求帮助。以下是模型:

class User(AbstractUser):
    pass

class Post(models.Model):
    posterID = models.ForeignKey("User",  
      on_delete=models.CASCADE, related_name="post")
    content = models.TextField(blank=False)
    timestamp =models.DateTimeField(auto_now_add=True)


class Follow(models.Model):
    followerID = models.ForeignKey("User", 
       on_delete=models.CASCADE, 
       related_name="follower")
    followingID = models.ForeignKey("User", 
       on_delete=models.CASCADE, 
       related_name="follower_id")
我正在尝试使用posterID选择所有帖子 与Follow中的followerID匹配,并且当前用户正在跟踪(followerID)

我相信我的SQL应该是这样的:

SELECT * 
FROM Post
WHERE Post.posterID IN
 (
    SELECT followingID
    FROM Follow
    WHERE followerID = request.user.id
 )
我猜我可以从以下内容开始: (假设当前request.user id==1)

任何帮助都将不胜感激


谢谢。

我想出了一个办法来完成这件事,这可能不是最好的办法,但它很管用

// First I created a queryset from the Follow model:
    user = request.user
    f = Follow.objects.filter(followerID=user)

// Because the I need JUST the followingID from f, I created a list for it:
    fList = []

// Then I went iterated through the queryset, just appending the followingID to the list:
    for x in range(len(f)):
            fList.append(f[x].followingID)

// Finally I used the list in the main query from Post model:
    posts = Post.objects.filter(posterID__in=fList)
    return JsonResponse([post.serialize() for post in posts], safe=False)

Post
Follow
未连接?它们未连接,必须通过用户作为中间人。
// First I created a queryset from the Follow model:
    user = request.user
    f = Follow.objects.filter(followerID=user)

// Because the I need JUST the followingID from f, I created a list for it:
    fList = []

// Then I went iterated through the queryset, just appending the followingID to the list:
    for x in range(len(f)):
            fList.append(f[x].followingID)

// Finally I used the list in the main query from Post model:
    posts = Post.objects.filter(posterID__in=fList)
    return JsonResponse([post.serialize() for post in posts], safe=False)