2016-11-01 22 views
0

我在我的几个应用程序的模型(不是全部)上使用我的自定义权限mixin。正在更新Django mixin子实例

对于需要从“旧上下文”权限合并到“新上下文”权限的情况,我希望具有更改所有模型中的相应权限引用属性的功能,该属性将此mixin进行了子类化。

我怎么知道哪些模型子类化了这个权限mixin,并且他们有继承的权限引用属性?

其实我想在我的mixin有这样的功能:

class WorkspaceManagedMixin(models.Model): 

    workspace = models.ForeignKey(Workspace) 

    class Meta: 
     abstract = True 

    @classmethod 
    def merge_to(cls, from_wspace, to_wspace): 
     """ 
     Reallocating workspace's objects to other workspace. 
     """ 

     workspace_managed_models = [] # HOW TO GET THIS? 

     try: 
      with transaction.atomic(): 
       for model in workspace_managed_models: 
        model.objects.filter(
         workspace=from_wspace, 
        ).update(workspace=to_wspace) 
     except IntegrityError as e: # or DatabaseError 
      raise e 

子类的模型可以在项目中的其他Django应用程序。

回答

0

Uff。挖围绕互联网,我发现现在__subclasses__(),这在Django的:

[subclass for subclass in m.__subclasses__() 
      if issubclass(subclass, models.Model)] 

我认为它需要一个)递归,B)转换为设定由于潜在的重复。