【发布时间】:2018-07-05 19:56:53
【问题描述】:
我创建了一个函数来实例化一个封装一些通信的属性:
def orion_field(name, field=None):
def getter(self,):
return self.get(name)
def setter(self, value):
self.set(name, value)
return property(getter, setter)
我想以与 Django 字段类似的方式将它包含在我的 Django 模型中:
class KPI(models.Model):
orion_id = models.CharField(primary_key=True, unique=True,
max_length=10)
data = JSONField(blank=True, default={})
name = orion_field("name")
def set(self, attribute, value):
self.data[attribute]= value
# Ugly code removed that send stuff to server
def get(self, attribute):
# Ugly code removed that may(or may not) bring stuff from server
return self.data[attribute]
通信代码运行良好,但我注意到这些新属性在类级别上运行。
orion_entity1 = KPI()
orion_entity2 = KPI()
orion_entity1.name = "Babar"
print(orion_entity2.name)
>>> Babar
我想在某些时候 Django 将类字段转换为实例字段。我搜索了他们的代码,但我迷路了。
【问题讨论】:
标签: python django python-3.x django-models properties