Django模型模型的getter

时间:2019-03-16 13:14:51

标签: 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()
    balance = models.IntegerField()

    @property
    def balance(self):
        if balance:
           return balance
        return 0.15 * 50

但是不允许重新声明。我该如何解决这个问题?

注意:该字段应与 ModelAdmin DRF序列化器

兼容

2 个答案:

答案 0 :(得分:1)

有两种方法。通过使用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

答案 1 :(得分:0)

模型方法名称不应与模型字段相同

e.g. I want 2018 all videos information.

请参阅此https://docs.djangoproject.com/en/2.1/topics/db/models/#model-methods