更新Django mixin子类实例

时间:2016-11-01 02:11:52

标签: python django mixins

我在我的几个应用程序的模型中使用我的自定义权限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应用程序中。

1 个答案:

答案 0 :(得分:0)

UFF。在互联网上挖掘我现在发现__subclasses__(),这在Django本身:

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

我认为它需要a)递归,b)由于潜在的重复而转换为set。