Django:通过该类中的其他属性向模型类添加新属性

时间:2017-12-14 02:23:46

标签: python django django-models

我正在尝试使用 is_admin 组<为我的用户类分配一个新属性 apps / em> User类的属性,但我不知道该怎么做..这就是我正在尝试的:

在我的models.py中,我有一个User类,其方法为 assign_apps 。我正在尝试使用该方法通过使用导入的函数 get_user_apps is_admin将新属性添加到User类 apps (User.apps) 属性

我很确定这不起作用,因为我不得不调用User.assign_apps()

是否有更好的方法来执行此操作,以便 User.is_admin User.group 计算 User.apps

from .helpers import get_user_apps

class User():
    is_admin = models.BooleanField(default=False)
    group = models.ForeignKey(Brand, null=True, blank=True)

    def assign_apps(self):
        self.apps = get_user_apps(self.group, self.is_admin)

1 个答案:

答案 0 :(得分:1)

您可以在函数上使用property装饰器。

from .helpers import get_user_apps

class User():
    is_admin = models.BooleanField(default=False)
    group = models.ForeignKey(Brand, null=True, blank=True)

    @property
    def apps(self):
        return get_user_apps(self.group, self.is_admin)

然后,您可以在apps方法中了解实例所需的内容,并参考self.groupself.is_admin等。

它将在使用中显示为属性:

user = User()
user.apps

通过这样做,您不需要使用assign_apps来设置它将始终存在的属性。当您使用user.apps时(注意它是属性而非函数调用),您将获得get_user_apps(self.group, self.is_admin)的结果