Anu*_*TBE 4 django django-models
我正在使用Django 2.x
我有一个像
class MyModel(models.Model):
name = models.CharField()
balance = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想更改 GET 请求中的 balance 值而不更改数据库中的值。
就像它可能是@Property字段一样,模型看起来像
class MyModel(models.Model):
name = models.CharField()
balance = models.IntegerField()
@property
def balance(self):
if balance:
return balance
return 0.15 * 50
Run Code Online (Sandbox Code Playgroud)
但不允许重新声明。我该如何解决这个问题?
注意:字段应与ModelAdmin和DRF Serializer兼容
C14*_*14L 14
有两种方法。通过使用getter/setter并隐藏实际的表字段。这将允许您myobject.balance像模型中的任何常规字段一样使用,分配给它myobject.balance = 123并从中读取print(myobject.balance)等。
class MyModel(models.Model):
name = models.CharField()
_balance = models.IntegerField()
@property
def balance(self):
if self._balance:
return self._balance
return 0.15 * 50
@balance.setter
def balance(self, value):
self._balance = value
Run Code Online (Sandbox Code Playgroud)
使用前导_是“隐藏”(私有)字段的 Python 约定。
第二种更简单的方法是简单地使用get_balance()函数,而不是使用属性。
def get_balance(self):
if self.balance:
return self.balance
return 0.15 * 50
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7329 次 |
| 最近记录: |