def add_related_count(self, queryset, rel_model, rel_field, count_attr,
                          cumulative=False):
        connection = self._get_connection()
        qn = connection.ops.quote_name

        meta = self.model._meta
        mptt_field = rel_model._meta.get_field(rel_field)

        if isinstance(mptt_field, ManyToManyField):
            if cumulative:
                subquery = CUMULATIVE_COUNT_SUBQUERY_M2M % {
                    'rel_table': qn(rel_model._meta.db_table),
                    'rel_pk': qn(rel_model._meta.pk.column),
                    'rel_m2m_table': qn(mptt_field.m2m_db_table()),
                    'rel_m2m_column': qn(mptt_field.m2m_column_name()),
                    'mptt_fk': qn(mptt_field.m2m_reverse_name()),
                    'mptt_table': qn(self.tree_model._meta.db_table),
                    'mptt_pk': qn(meta.pk.column),
                    'tree_id': qn(meta.get_field(self.tree_id_attr).column),
                    'left': qn(meta.get_field(self.left_attr).column),
                    'right': qn(meta.get_field(self.right_attr).column),
                }
            else:
                subquery = COUNT_SUBQUERY_M2M % {
                    'rel_table': qn(rel_model._meta.db_table),
                    'rel_pk': qn(rel_model._meta.pk.column),
                    'rel_m2m_table': qn(mptt_field.m2m_db_table()),
                    'rel_m2m_column': qn(mptt_field.m2m_column_name()),
                    'mptt_fk': qn(mptt_field.m2m_reverse_name()),
                    'mptt_table': qn(self.tree_model._meta.db_table),
                    'mptt_pk': qn(meta.pk.column),
                }
        else:
            if cumulative:
                subquery = CUMULATIVE_COUNT_SUBQUERY % {
                    'rel_table': qn(rel_model._meta.db_table),
                    'mptt_fk': qn(rel_model._meta.get_field(rel_field).column),
                    'mptt_table': qn(self.tree_model._meta.db_table),
                    'mptt_rel_to': qn(mptt_field.rel.field_name),
                    'tree_id': qn(meta.get_field(self.tree_id_attr).column),
                    'left': qn(meta.get_field(self.left_attr).column),
                    'right': qn(meta.get_field(self.right_attr).column),
                }
            else:
                subquery = COUNT_SUBQUERY % {
                    'rel_table': qn(rel_model._meta.db_table),
                    'mptt_fk': qn(rel_model._meta.get_field(rel_field).column),
                    'mptt_table': qn(self.tree_model._meta.db_table),
                    'mptt_rel_to': qn(mptt_field.rel.field_name),
                }
        return queryset.extra(select={count_attr: subquery})
Adds a related item count to a given ``QuerySet`` using its
dataset/ETHPy150Open django-mptt/django-mptt/mptt/managers.py/TreeManager.add_related_count