我正在使用 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序列化器
兼容答案 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