我正在使用Django开发服务器网站,我的模型$
包含ST_Folio
和idST
,我需要创建字典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>]}
谢谢!
答案 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
来获取相关对象并优化对相关对象的访问。