Django:过滤外键

发布于 2024-12-21 19:38:46 字数 579 浏览 0 评论 0原文

我有以下代码:

        query = Entry.objects.all()
        print 'authors ' + repr([x.id for x in authors])
        print 'query ' + repr(query)
        print 'query ids ' + repr([x.author.id for x in query])
        query.filter(author__in=authors)
        print 'filtered ids ' + repr([x.author.id for x in query])

输出如下:

        authors [2]
        query [<Entry: test>, <Entry: test>]
        query ids [2, 3]
        filtered ids [2, 3]

显然,3 不在 [2] 中。那么,为什么过滤后的 id 是 [2, 3] 而不仅仅是 [2]?

问候

I have the following code:

        query = Entry.objects.all()
        print 'authors ' + repr([x.id for x in authors])
        print 'query ' + repr(query)
        print 'query ids ' + repr([x.author.id for x in query])
        query.filter(author__in=authors)
        print 'filtered ids ' + repr([x.author.id for x in query])

Which outputs this:

        authors [2]
        query [<Entry: test>, <Entry: test>]
        query ids [2, 3]
        filtered ids [2, 3]

Obviously, 3 is not in [2]. So, why filtered ids are [2, 3] and not just [2]?

Regards

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

錯遇了你 2024-12-28 19:38:46

当您调用query.filter(author__in=authors)时,它会返回一个新的查询集。它不会修改现有的查询集。

如果您将新的查询集分配给查询,那么您将得到您期望的结果。

query = query.filter(author__in=authors)
print 'filtered ids ' + repr([x.author.id for x in query])

When you call query.filter(author__in=authors), it returns a new queryset. It does not modify the existing queryset.

If you assign the new queryset to query, then you will get the result you were expecting.

query = query.filter(author__in=authors)
print 'filtered ids ' + repr([x.author.id for x in query])
魔法唧唧 2024-12-28 19:38:46

尝试这个而不是当前的过滤器:

query = query.filter(author__in=authors)

Try this instead of your current filter:

query = query.filter(author__in=authors)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文