I have a couple of models that inherit from a parent model.
class ContentItem(models.Model):
    COLUMN_CHOICES = (
        (FIRST_COLUMN, 1),
        (SECOND_COLUMN, 2),
        (THIRD_COLUMN, 3),
    )
    row      = models.ForeignKey(RowItem)
    column   = models.SmallIntegerField(choices=COLUMN_CHOICES, default=FIRST_COLUMN)
    group    = models.IntegerField(default=0, unique=False, null=False, blank=False)
    objects  = InheritanceManager()
class TextItem(ContentItem):
    title    = models.CharField(max_length=500, unique=False, null=True, blank=True)
    content  = models.TextField(max_length=50000, unique=False, null=True, blank=True)
class FaqItem(ContentItem):
    question = models.TextField(max_length=1000, unique=False, null=True, blank=True)
    answer   = models.TextField(max_length=5000, unique=False, null=True, blank=True)
I'm using the InheritanceManager from Django Model Utils for help with returning the child model and not the parent.
Content objects belong to a row, a column, and optionally, a group of content objects.
When I query ContentItems with ContentItem.objects.filter(row__page=page).select_subclasses() I get something like this [<FaqItem: FaqItem object>, <FaqItem: FaqItem object>, <TextItem: TextItem object>].
I can get so far with the data in his structure but I've hit a wall and can't achieve the desired complex HTML layout in the template, specifically with the optional grouping of objects by the group field.
I think having the data in a nested structure would make it easy to loop over and create the desired template layout of rows containing columns containing content items - some of which are grouped, some of which stand alone. i.e like this interpretation:
content_items {
    'rows': {
        0: {
            'columns': {
                0: {
                    'faq_items': {
                        'groups': {
                            0: {
                                faq_obj,
                                faq_obj,
                            },
                            1: {
                                faq_obj,
                                faq_obj,
                                faq_obj,
                            },
                        },
                        faq_obj,
                    'text_items': {
                        'groups': {
                            0: {
                                text_obj,
                                text_obj,
                            },
                        },
                        text_obj,
                        text_obj,
                        text_obj,
                    }
                1: ...
            },
        },
        1: ...
    }
}
Is this possible / advisable? Or is there a way I can do it in the template. It currently looks like this:
{% for content_item in content_items %}
    {% if content_item.row == row and content_item.column == column_number %}
        <div class="content-item">
            {% include "content-item.html" %}
        </div>
    {% endif %}
{% endfor %}
'row' and 'column_number' are passed into this template include. This works ok. But when content items are in the same group, I want to bypass the <div class="content-item"> div so I can visually tie content items belonging to the same group together.
 
    