【问题标题】:Updating Django mixin subclassed instances更新 Django mixin 子类实例
【发布时间】:2016-11-01 02:11:52
【问题描述】:

我在我的几个应用模型(不是全部)上使用我的自定义权限混合。

对于需要从“旧-上下文”权限合并到“新-上下文”权限的情况,我希望具有更改所有模型中相应权限引用属性的功能,这些模型是该 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 应用程序中。

【问题讨论】:

    标签: python django mixins


    【解决方案1】:

    呃。我现在在互联网上挖掘__subclasses__(),而这在 Django 本身中:

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2019-05-07
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多