我正在使用Django 2.x.
我有一个像这样的模特
class MyModel(models.Model):
name = models.CharField()
balance = models.IntegerField()
我想在不更改数据库中的值的情况下更改GET请求上的余额值。
就像它可能是@Property字段一样,模型看起来像
class MyModel(models.Model):
name = models.CharField()
balance = models.IntegerField()
@property
def balance(self):
if balance:
return balance
return 0.15 * 50
但是不允许重新声明。我该如何解决这个问题?
注意:字段应与ModelAdmin和DRF Serializer兼容
有两种方法。通过使用a 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
使用领先的_
是“隐藏”(私有)字段的Python惯例。
第二种也是更简单的方法是简单地使用get_balance()
函数,而不是使用属性。
def get_balance(self):
if self.balance:
return self.balance
return 0.15 * 50
模型方法名称不应与模型字段相同
class MyModel(models.Model):
name = models.CharField()
balance = models.IntegerField()
@property
def get_balance(self):
if self.balance:
return self.balance
return 0.15 * 50
参考这个https://docs.djangoproject.com/en/2.1/topics/db/models/#model-methods