Djangoobjects.filter()values_list()与Python列表理解__in查询
我对 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试
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.需要注意的一件事是,values/values_list 的行为与列表理解有所不同:
选择错误的选项要么会导致不必要的数据库命中,要么会导致不必要的混乱,具体取决于您想要做什么。
One thing to note is that there is a difference in the behaviour of values/values_list from a list comprehension:
Choosing the wrong one will either result in unnecessary database hits, or unnecessary faffing around, depending on what you are trying to do.