我想在模型上设置非持久属性。我尝试了以下方法:
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)
我收到错误:无法设置attribute。为什么?
您还需要为属性定义一个setter函数,现在,它是只读的(例如,参见此问题)。
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
(例如,由于继承),则还可以重命名属性本身。