gpt4 book ai didi

python - 如何在 django 中创建字典键值对

转载 作者:行者123 更新时间:2023-11-30 22:33:41 25 4
gpt4 key购买 nike

我正在使用 Django 开发服务器 Web,我的模型 ST_Folio 包含 idSTidFolio,我需要创建一个字典 {idST:[idFolio1,idFolio2,...]}

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

我正在使用这个方法..

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)}

并获得这个

第一次打印(st_database):

<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: st1>: [<idFolio: folio1>, <idFolio: folio20>], <ST: st2>: [<idFolio: folio1>]}

我的模型 ST_Folio

class St_folio(models.Model):
idST = models.ForeignKey('ST', blank=True, null=True)
idFolio = models.ForeignKey('Folio', blank=True, null=True)
class Meta:
unique_together = (('idST', 'idFolio'),)
idPro = models.ForeignKey('Pro', blank=True, null=True)
path_img = models.TextField(blank=True, null=True)
note = models.TextField(blank=True, null=True)
lng = models.FloatField(blank=True, null=True)
lat = models.FloatField(blank=True, null=True)
date = models.DateTimeField(blank=True, null=True)
def __str__(self):
return str(self.id) + "st_folio"

谢谢!!

最佳答案

您可以访问相关对象并从中构建列表:

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

另请注意,groupby 要求对可迭代对象进行预排序,因此,您可能需要在应用 groupby 之前对查询集进行排序:

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获取相关对象并优化对相关对象的访问。

关于python - 如何在 django 中创建字典键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45088490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com