Python无法在非持久属性上设置属性

时间:2015-12-09 13:14:56

标签: python python-3.x

我想在模型上设置非持久属性。我尝试过以下方法:

class class User(models.Model):
    email = models.EmailField(max_length=254, unique=True, db_index=True)

    @property
    def client_id(self):
        return self.client_id

然后:

user = User.objects.create(email='123', client_id=123)
print(user.client_id)

我收到错误:无法设置属性。为什么呢?

1 个答案:

答案 0 :(得分:4)

你也需要为你的属性定义一个setter函数,现在,它是只读的(参见,例如,http://www.codejava.net/java-core/collections/sorting-a-list-by-multiple-attributes-example问题)。

class class User(models.Model):
    email = models.EmailField(max_length=254, unique=True, db_index=True)

    @property
    def client_id(self):
        return self.internal_client_id

    @client_id.setter
    def client_id(self, value):
        self.internal_client_id = value

请注意,我将self.client_id重命名为self.internal_client_id,否则,您将以递归方式调用getter和setter函数 - 内部变量的名称需要与属性的名称不同。

当然,如果您需要使用self.client_id(例如因为继承),您也可以重命名该属性。