Django - 重构的查询集不可迭代

时间:2016-06-12 12:28:55

标签: python django iteration

我有一个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,我看不出原因。

1 个答案:

答案 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("----")