2016-11-01 23 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)轉換爲設定由於潛在的重複。