【发布时间】:2015-11-28 16:36:36
【问题描述】:
我目前正在创建一个这样的查询集字典:
def get_type_dicts(self):
types = BadgeType.objects.all()
return {t.name : self.get_queryset().get_type(t) for t in types}
编辑:此方法是BadgeManager(models.Manager) 的一部分,其中:
class Badge(models.Model):
...
badge_type = models.ForeignKey(BadgeType)
结果如下:
{'Award': [<Badge: Copy of Copy of Blenbade>],
'Achievement': [<Badge: Copy of Blenbade>, <Badge: regergg>],
'Talent': [<Badge: Blender Brown Belt>, <Badge: Blender Blue Belt>, <Badge: Copy of Blender Blue Belt>, <Badge: fgdfgf Blender Blue Belt>, <Badge: Copy of Blender Brown Belt>, <Badge: Copy of fgdfgf Blender Blue Belt really long name >, <Badge: Copy of Blender Blue Beltcv x>, <Badge: regerggsdvsdv>]
}
我怎样才能得到这样的东西?
{'Award': {'Attribute1': "something",
'Attribute2': 27,
'queryset': [<Badge: Copy of Copy of Blenbade>]
},
'Achievement': {'Attribute1': "somethingelse",
'Attribute2': 99658,
'queryset': [<Badge: Copy of Blenbade>, <Badge: regergg>]
},
etc...
}
编辑 2:或者更简单,基于尚的评论:
[
{'type': <BadgeType: Talent>,
'queryset': [<Badge: Copy of Copy of Blenbade>]
},
{'type': <BadgeType: Achievement>,
'queryset': [<Badge: Copy of Blenbade>, <Badge: regergg>]
},
etc...
]
这些属性都来自BadgeType模型,所以可以找到和t.name一样的属性:
t.icon
t.description
等等
编辑:徽章类型模型:
class BadgeType(models.Model):
name = models.CharField(max_length=50, unique=True)
icon = models.CharField(max_length=50, blank=True, null=True)
description = models.TextField(blank=True, null=True)
....
【问题讨论】:
-
您需要向我们展示 BadgeType 模型。我们不知道
Award、Achievement来自哪里。 -
抱歉,我添加了更多细节,包括 BadgeType 型号和 Badge。但那些来自 t.name (BadgeType.name)
-
那你是在正确的轨道上,你有没有尝试过
return {t.name : {'name': t.name, 'icon': t.icon, 'description': t.description, 'queryset': self.get_queryset().get_type(t)} for t in types}? -
谢谢!您可以将此作为答案发布吗?另外,似乎不是传递字段,我可以只传递对象本身
t并在上下文中获取我需要的字段? -
另外,现在作为列表发送会更容易吗?因为我不需要带有标签't.name'的字典,因为我正在传递对象本身并且可以从对象中获取名称?
标签: python django dictionary django-queryset