2016-06-12 4 views
0

Ich habe ein Django-Queryset. Ich verwende groupby die queryset zur Umstrukturierung:Django - Das restrukturierte Abfrageset ist nicht iterierbar

content_items = ContentItem.objects.filter(content_group__row__page=page) 

content_items wie folgt aussieht:

[<Faq: Faq object>, <Text: Text object>, <Faq: Faq object>, <Faq: Faq object>] 

Gruppe content_items von content_group Attribut:

content_groups = {} 
for group, items in groupby(content_items, lambda x: x.content_group): 
    content_groups[group] = list(items) 

content_groups sieht wie folgt aus:

{<ContentGroup: 16>: [<Faq: Faq object>, <Faq: Faq object>], <ContentGroup: 17>: [<Text: Text object>], <ContentGroup: 18>: [<Faq: Faq object>]} 

Iterieren über content_groups ...

for content_group in content_groups: 
    for content_item in content_group: 
     print content_item 

... produziert 'ContentGroup' object is not iterable, ich kann nicht sehen, warum.

Antwort

1

content_groups ist ein Wörterbuch, wenn Sie es iterieren über:

for content_group in content_groups: 

content_group zu jedem Schlüssel entsprechen würde - ein ContentGroup Instanz. Und Sie erhalten einen Fehler, wenn Sie versuchen, eine Schleife darüber zu durchlaufen - eine Django-Modellinstanz ist nicht iterierbar.

Stattdessen soll Sie 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("----")