    def generate_mixin_chain(self):
        mixins = []
        cursor = self.__class__
        while cursor is not ModelAdmin and cursor is not None:
            if hasattr(cursor, 'mixins'):
                mixins += [mixin for mixin in cursor.mixins if mixin not in mixins]
            cursor = cursor.__base__

        mixin_len = len(mixins)
        if mixin_len > 0:
            for index, mixin in enumerate(mixins):
                target = ModelAdmin
                if index != (mixin_len-1):
                    target = mixins[index+1]
                mixin.__bases__ = (target,)
            MixinModelAdmin.__bases__ = (mixins[0],)


# example usage:

class MyModelAdmin(MixinModelAdmin):
    """ 
        The resultant inheritance tree will look like so: 
        ModelAdmin
        DispatchableModelAdmin
        WidgetModelAdmin
        MixinModelAdmin
        MyModelAdmin

        where ModelAdmins subclass the ModelAdmin directly above them.
    """
    mixins = (WidgetModelAdmin, DispatchableModelAdmin, )


