﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
16931	"""get_context_data"" should follow MRO"	linovia	nobody	"Actually, mixins do not allow to cumulate the context building.

For example:
{{{
class CommentMixin(FormMixin, SingleObjectMixin):
    pass
}}}
In that case, we expect both FormMixin and SingleObjectMixin to build their context.
However, as none of them use super in their get_context_data do use super, we only get the FormMixin context. 

The reason to use super here is not to call the parent get_context_data but the next class in MRO.

{{{
class A(object):
    def a(self):
        print ""A""
        if hasattr(super(A, self), 'a'):
            super(A, self).a()


class B(object):
    def a(self):
        print ""B""
        if hasattr(super(B, self), 'a'):
            super(B, self).a()


class C(object):
    def a(self):
        print ""C""


class D(B, A):
    pass


class E(C, A):
    pass


print ""MRO:"", [x.__name__ for x in D.__mro__]
d = D()
d.a()

print ""MRO:"", [x.__name__ for x in E.__mro__]
e = E()
e.a()
}}}

With that example, one can see that d calls both B then A while e only calls C.

While this might usually be unnoticed, it prevents Mixin to be chained.
For example, mixing a single object item with a list (for a shop: one category with the associated products, for a bug tracker: a milestone with the associated tickets) or a single item with a form such as a post with a comment form.
"	New feature	closed	Generic views	1.3	Normal	duplicate		linovia	Accepted	0	0	0	0	0	0
