Django queryset语法使用WHERE IN子句
我可以通过queryset电话寻求帮助。以下是模型: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)
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)