Django queryset语法使用WHERE IN子句问题



我可以使用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")

我正在尝试选择与Follow中的followingID匹配并且当前用户正在关注(followerID(的具有posterID的所有帖子。

我认为我的SQL应该是这样的:

SELECT * 
FROM Post
WHERE Post.posterID IN
(
SELECT followingID
FROM Follow
WHERE followerID = request.user.id
)

我想我可以从以下内容开始:(假设当前请求用户id==1(

f = Follow.objects.filter(followerID=1)
p = Post.objects.filter(posterID__in= [-- something 
with f--] )

如有任何帮助,我们将不胜感激。

谢谢。

我找到了一种方法来完成这项工作,这可能不是最好的方法,但它确实有效。

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

最新更新