如何在django中创建字典键值

时间:2017-07-13 18:30:39

标签: python django dictionary

我正在使用Django开发服务器网站,我的模型$包含ST_FolioidST,我需要创建字典idFolio

但我的问题是我可以创建类似的字典,但不是我想要的。

我正在使用此方法..

{idST: [idFolio1, idFolio2, ...]}

并获得此

首次打印(st_database):

st_database = St_folio.objects.exclude(idST__isnull=True)
dictionary = {k: list(g) for k, g in groupby(st_database, key=lambda q: q.idST)}

第二次印刷(字典):

<QuerySet [<St_folio: 1st_folio>, <St_folio: 2st_folio>, <St_folio: 3st_folio>]>

我需要这样的事情:

{<ST: st1>: [<St_folio: 1st_folio>, <St_folio: 2st_folio>], <ST: st2>: [<St_folio: 3st_folio>]}

我的模特ST_Folio

{<ST: st1>: [<idFolio: folio1>, <idFolio: folio20>], <ST: st2>: [<idFolio: folio1>]}

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以访问相关对象并根据以下内容构建列表:

dct = {k: [x.idFolio for x in g] for k, g in groupby(st_database, key=lambda q: q.idST)}

另请注意,groupby要求对iterable进行预先排序,因此,您可能希望在应用groupby时订购QuerySet:

st_database = St_folio.objects.exclude(idST__isnull=True).order_by('idST')

或者:

st_database = St_folio.objects.exclude(idST__isnull=True).order_by('idST_id')

如果您为Meta.ordering指定了不同的字段。

您还可以添加select_related来获取相关对象并优化对相关对象的访问。