@Vijay, thanks. I also had a similar idea, but I was surprised it was not 
somewhere already implemented. 

Then I found __subclasses__() as mentioned 
here 
http://stackoverflow.com/questions/40353219/updating-django-mixin-subclassed-instances/40353284#40353284

It works (Python 3.3, Django 1.8) ;)

Thx, R


On Tuesday, November 1, 2016 at 7:20:18 PM UTC+1, Vijay Khemlani wrote:
>
> You could use a metaclass to keep track of all the classes that inherit 
> from a given one, in a pure Python way it would be something like this
>
> class PluginMeta(type):
>     # we use __init__ rather than __new__ here because we want
>     # to modify attributes of the class *after* they have been
>     # created
>     def __init__(cls, name, bases, dct):
>         if not hasattr(cls, 'registry'):
>             # this is the base class.  Create an empty registry
>             cls.registry = {}
>         else:
>             # this is a derived class.  Add cls to the registry
>             interface_id = name.lower()
>             cls.registry[interface_id] = cls
>         super(PluginMeta, cls).__init__(name, bases, dct)
> class Plugin(object):
>     __metaclass__ = PluginMeta
>
>
>
> So, all the classes that inherit from Plugin are stored in 
> Plugin.registry. Not sure if it works for mixins though.
>
> On Mon, Oct 31, 2016 at 4:03 PM, Radek Svarz <[email protected] 
> <javascript:>> wrote:
>
>> Hi,
>>
>> I am using my custom permission mixin on several of my apps's models (not 
>> all).
>>
>> For the case when I need to merge from the "old - context" permission to 
>> the "new - context" permission I want to have function which changes the 
>> corresponding permission reference attribute in all models, which 
>> subclassed this mixin.
>>
>> How do I know which models subclassed this permission mixin and that they 
>> have the inherited permission reference attribute?
>>
>> In fact I want to have such function in my mixin:
>>
>> @classmethod
>> def merge_to(cls, from_perm_context, to_perm_context):
>>
>>     perm_context_models = []  # How to get this?
>>
>>     try:
>>         with transaction.atomic():
>>             for model in perm_context_models:
>>                 model.objects.filter(
>>                     perm_context=from_perm_context,
>>                 ).update(perm_context=to_perm_context)
>>     except IntegrityError as e:  # or DatabaseError
>>         raise e
>>
>>
>>
>>
>> Thanks, 
>>
>> Radek
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/576474f7-dace-4986-b121-0eb2e5428122%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/576474f7-dace-4986-b121-0eb2e5428122%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/c34a9bb6-01ee-49c5-9c0e-fa9cce342b7d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to