假设我有一个名为“Blog”的 Django 模型,其主键字段为“id”,是否可以运行一个查询,该查询将返回一个字典,其中包含索引 Blog 模型实例的 id 值的键?
in_bulk() 似乎是我想要的那种东西,但在这种情况下它需要一个特定 id 值的列表,例如
Blog.objects.in_bulk([1])
会给
{1: <Blog: Beatles Blog>}
该文件说,如果您传递一个空列表,您将得到一个空字典,那么有什么方法可以取回所有值吗?
这只是蟒蛇
{x.pk:x for x in Blog.objects.all()}
编辑:
Alb 在这里,只是补充一点,如果您使用的是 Python 2.6 或更早版本,则需要使用这种旧式语法:
dict((x.pk, x) for x in Blog.objects.all())
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
您还可以尝试将 ValuesListQuerySet 对象放入“in_bulk”方法中,如下所示:
blog_query = Blog.objects.values_list('pk', flat=True)
Blog.objects.in_bulk(blog_query)