gpt4 book ai didi

python - Django:通过通用名称访问子不同子类的方法

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:11 25 4
gpt4 key购买 nike

我有一个抽象基类,用于定义不同用户配置文件共享的公共(public)属性。

class Profile(models.Model):
...

def has_permissions(self, project):
...

class Meta:
abstract = True

class Standard(Profile):
...

class Premium(Profile):
...

现在我想检查某个用户的权限(始终分配一个不同的配置文件),而不必知道他拥有哪个配置文件,例如

user.profile.has_permission(project)

但这不起作用,因为“Profile”基类是抽象的。有办法规避这个问题吗?有没有办法从子对象中发现抽象父类的名称?

谢谢,丹尼尔

最佳答案

覆盖 auth.User 方法 get_profile() 以在所有子配置文件模型中进行调查,直到找到它:

  class MyUser(auth.models.User):
profile = models.OneToOneField(Profile)
def get_profile(self):
prof = None
try:
prof = Standard.objects.get(id=self.profile.pk)
except ObjectDoesNotExist:
prof = Premium.objects.get(id=self.profile.pk)
return prof

现在,不要这样做:

user.profile.has_permission(project)

你可以使用这个:

user.get_profile().has_permission(project)

希望对您有帮助。

关于python - Django:通过通用名称访问子不同子类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3457685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com