Djangoobjects.filter()values_list()与Python列表理解__in查询

发布于 2024-10-14 04:44:32 字数 596 浏览 2 评论 0原文

我对 Django 查询集过滤有一个怪癖(?):

ipdb> MagazineIssue.objects.filter(id__in=l_magazines.values_list('id'))
Out[0]: []

或者

ipdb> MagazineIssue.objects.filter(id__in=[l_magazine.id for l_magazine in l_magazines])
Out[0]: [<MagazineIssue: Architecture Australia, Jan 1995 (#1)>]

等等

ipdb> l_magazines.values_list('id')
Out[0]: [(1,)]
ipdb> [l_magazine.id for l_magazine in l_magazines]
Out[0]: [1]

,如何使用values_list()? (产生):

[1]

或者Python列表理解是“可行的方法”?

I have a quirk(?) with Django queryset filtering:

ipdb> MagazineIssue.objects.filter(id__in=l_magazines.values_list('id'))
Out[0]: []

or

ipdb> MagazineIssue.objects.filter(id__in=[l_magazine.id for l_magazine in l_magazines])
Out[0]: [<MagazineIssue: Architecture Australia, Jan 1995 (#1)>]

and

ipdb> l_magazines.values_list('id')
Out[0]: [(1,)]
ipdb> [l_magazine.id for l_magazine in l_magazines]
Out[0]: [1]

so, how to use values_list()? (to produce):

[1]

or is python list comprehension the 'way to go'?

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

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

发布评论

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

评论(2

街角迷惘 2024-10-21 04:44:33

尝试l_magazines.values_list('id', flat=True)。它返回一个 id 列表,而不是单个 id 元组列表。

Try l_magazines.values_list('id', flat=True). That returns a list of ids instead of a list of single id tuples.

巡山小妖精 2024-10-21 04:44:33

需要注意的一件事是,values/values_list 的行为与列表理解有所不同:

  • values/values_list 将生成存储在字段中的实际值,即,
  • 如果值是一个外键,并且您在模型中设置了适当的关系,列表理解将为您提供外键引用的对象。

选择错误的选项要么会导致不必要的数据库命中,要么会导致不必要的混乱,具体取决于您想要做什么。

One thing to note is that there is a difference in the behaviour of values/values_list from a list comprehension:

  • values/values_list will yield the actual value stored in the field, that is, just the id (not the whole object)
  • if the value is a foreign key, and you have the appropriate relations set up in your model, the list comprehension will give you the object referred to by the foreign key.

Choosing the wrong one will either result in unnecessary database hits, or unnecessary faffing around, depending on what you are trying to do.

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