如何获得由字段键入的模型对象的字典

Alb*_*Alb 6 python django model

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

in_bulk()看起来像我想要的东西,但在这种情况下它需要一个特定id值的列表,例如

Blog.objects.in_bulk([1])
Run Code Online (Sandbox Code Playgroud)

会给

{1: <Blog: Beatles Blog>}
Run Code Online (Sandbox Code Playgroud)

该文件说,如果你传递一个空列表,你将得到一个空字典,那么有什么方法可以让所有的价值回来?

Dmi*_*nko 11

这只是python

{x.pk:x for x in Blog.objects.all()}
Run Code Online (Sandbox Code Playgroud)

编辑:

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

dict((x.pk, x) for x in Blog.objects.all())
Run Code Online (Sandbox Code Playgroud)


Bas*_*lex 11

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

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

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

Blog.objects.in_bulk(field_name='<unique_field_name>')  
Run Code Online (Sandbox Code Playgroud)

注意:密钥必须是唯一的,否则你会得到 ValueError