模型场上的Django getter

模型场上的Django getter,django,django-models,Django,Django Models,我正在使用Django 2.x 我有一个这样的模特 class MyModel(models.Model): name = models.CharField() balance = models.IntegerField() 我想在GET请求上更改balance的值,而不更改数据库中的值 如果它可以是@Property字段,则模型将如下所示 class MyModel(models.Model): name = models.CharField() balanc

我正在使用Django 2.x

我有一个这样的模特

class MyModel(models.Model):
    name = models.CharField()
    balance = models.IntegerField()
我想在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
但不允许重新声明。我如何解决这个问题


注意:字段应与ModelAdminDRF序列化程序兼容有两种方式。通过使用和隐藏实际表字段。这将允许您像模型中的任何常规字段一样使用
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\u balance()
函数,而不使用属性

    def get_balance(self):
        if self.balance:
           return self.balance
        return 0.15 * 50

假设我已经有了这个字段,我可以添加getter/setter并更改字段名而不引起迁移吗?类似于
\u balance=models(db\u field\u name='balance')
免责声明:无法使用第一种方法在DRF中使用序列化程序使用balance创建数据库条目