我有一个抽象基类,用于定义不同用户配置文件共享的公共属性。
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”基类是抽象的。 有办法解决这个问题吗?有没有办法从子对象中发现抽象父类的名称?
谢谢, 丹尼尔
答案 0 :(得分:1)
覆盖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)
我希望它会对你有所帮助。
答案 1 :(得分:0)
我并不完全相信这是最好的方法。代码在对象意义上是正确的,但似乎不适合数据库视图(恕我直言)。 User
只有一个profile
,但数据库表将包含指向多个Profile
表的链接。
怎么样:
我很想知道其他人的想法。