2016-11-01 1 views
0

내 응용 프로그램 모델 중 일부에서 사용자 정의 믹스 인 mixin을 사용하고 있습니다 (전부는 아님).Django 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 

서브 클래 싱 된 모델은 프로젝트의 다른 장고 응용 프로그램에의 할 수있다.

답변

0

Uff. 장고 자체가 지금 인터넷의 주위에 __subclasses__()이를 내가 발견 파고 :

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

나는 그것이 인해 잠재적 중복에) 재귀, b는) 설정으로 변환 할 필요가 가정합니다.