我有一个Django查询集。我正在使用groupby
来重构查询集:
content_items = ContentItem.objects.filter(content_group__row__page=page)
content_items
看起来像这样:
[<Faq: Faq object>, <Text: Text object>, <Faq: Faq object>, <Faq: Faq object>]
按content_items
属性分组content_group
:
content_groups = {}
for group, items in groupby(content_items, lambda x: x.content_group):
content_groups[group] = list(items)
content_groups
看起来像这样:
{<ContentGroup: 16>: [<Faq: Faq object>, <Faq: Faq object>], <ContentGroup: 17>: [<Text: Text object>], <ContentGroup: 18>: [<Faq: Faq object>]}
迭代content_groups
...
for content_group in content_groups:
for content_item in content_group:
print content_item
...产生'ContentGroup' object is not iterable
,我看不出原因。
答案 0 :(得分:1)
content_groups
是一个字典,当您通过以下方式迭代它时:
for content_group in content_groups:
content_group
将对应于每个键 - 一个ContentGroup
实例。并且,当您尝试遍历它时会出现错误 - Django模型实例不可迭代。
相反,您的意思是iterate over dictionary items:
for content_group, faq_objects in content_groups.items():
print(content_group)
for faq_object in faq_objects:
print(faq_object)
print("----")