【发布时间】:2018-12-10 13:53:31
【问题描述】:
更新:见底部。
我正在努力思考如何根据我的需要实现嵌套/链式查询。可能有更好的方法来获得我需要的结果,所以请告诉我。
尝试获取经过身份验证的用户并获取我正在工作的朋友列表,并且我得到了朋友的查询集对象。我想将朋友的查询集对象传递给另一个搜索 Post 模型的查询,将找到的用户名 Friend.users 与 Post.creator 相匹配,所以我得到另一个查询集,它将包含我所有朋友的所有帖子,我可以显示在模板中。
class Friend(models.Model):
users = models.ManyToManyField(User, blank=True)
owner = models.ForeignKey(User, related_name='owner_friend', on_delete=models.CASCADE, null=True, blank=True)
class Post(models.Model):
creator = models.ForeignKey(User, on_delete=None, null=True)
编辑:
我正在尝试用我的代码做到这一点
f = Friend.objects.all().filter(owner__username='admin').filter(users__username='jeff')
输出
<QuerySet [<Friend: Friend object (1)>]>
p = Post.objects.all().filter(creator__username__in=f)
ValueError: Cannot use QuerySet for "Friend": Use a QuerySet for "User".
感谢您的帮助。
更新 1:
我已将模型更改为使用 ForeignKeys。我一直在使用 shell 进行测试,得到了一个意想不到的结果,见下文。
class Friend(models.Model):
users = models.ForeignKey(User, related_name='user_friend', on_delete=models.CASCADE, null=True, blank=True)
owner = models.ForeignKey(User, related_name='owner_friend', on_delete=models.CASCADE, null=True, blank=True)
f = Friend.objects.filter(owner__username='admin').values_list('users__username', flat=True)
输出
<QuerySet ['jeff', 'sam']>
Post.objects.filter(creator__username__in=list(f))
输出
<QuerySet []>
如果我手动输入列表
Post.objects.filter(creator__username__in=['admin', 'jeff'])
输出
<QuerySet [<Post: Post Title 1>]>
我认为如果我可以让 __in=list(f) 工作,这应该可以解决问题。
更新 2
list(f) 实际上正在工作,我没有为被拉入的朋友的用户帐户链接的帖子。为朋友创建帖子后,我现在得到了一个查询集。
我不确定我在做什么是最好的方法,但它确实有效。
希望对未来的读者有所帮助。
【问题讨论】:
-
为什么不直接给
User加一个friends字段?
标签: python django python-3.6