我在我的几个应用程序的模型中使用我的自定义权限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 :(得分:0)
UFF。在互联网上挖掘我现在发现__subclasses__()
,这在Django本身:
[subclass for subclass in m.__subclasses__()
if issubclass(subclass, models.Model)]
我认为它需要a)递归,b)由于潜在的重复而转换为set。