13

假设我有一个名为“Blog”的 Django 模型,其主键字段为“id”,是否可以运行一个查询,该查询将返回一个字典,其中包含索引 Blog 模型实例的 id 值的键?

in_bulk() 似乎是我想要的那种东西,但在这种情况下它需要一个特定 id 值的列表,例如

Blog.objects.in_bulk([1])

会给

{1: <Blog: Beatles Blog>}

该文件说,如果您传递一个空列表,您将得到一个空字典,那么有什么方法可以取回所有值吗?

4

3 回答 3

19

这只是蟒蛇

{x.pk:x for x in Blog.objects.all()}

编辑:

Alb 在这里,只是补充一点,如果您使用的是 Python 2.6 或更早版本,则需要使用这种旧式语法:

dict((x.pk, x) for x in Blog.objects.all())
于 2013-11-06T20:26:25.830 回答
12

in_bulk方法的id_list参数是默认的,所以不要传递任何东西给它:None

>>> Blog.objects.in_bulk()
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>, 3: <Blog: Django Weblog>}

结果,默认键是主键。要覆盖该使用:

Blog.objects.in_bulk(field_name='<unique_field_name>')  

注意:密钥必须是唯一的,否则您将获得ValueError

于 2017-12-13T14:57:34.200 回答
0

您还可以尝试将 ValuesListQuerySet 对象放入“in_bulk”方法中,如下所示:

blog_query = Blog.objects.values_list('pk', flat=True)
Blog.objects.in_bulk(blog_query)
于 2014-05-21T13:19:15.430 回答