簡體   English   中英

如何在django中創建字典鍵值

[英]How to create dictionary key-values in django

我正在使用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要求對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以獲取相關對象並優化對相關對象的訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM