我想在模型上设置非持久属性。我尝试过以下方法:
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)
我收到错误:无法设置属性。为什么呢?
答案 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
(例如因为继承),您也可以重命名该属性。