Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建一个与Django字段类似的属性(该属性错误地充当类属性)_Python_Django_Python 3.x_Django Models_Properties - Fatal编程技术网

Python 创建一个与Django字段类似的属性(该属性错误地充当类属性)

Python 创建一个与Django字段类似的属性(该属性错误地充当类属性),python,django,python-3.x,django-models,properties,Python,Django,Python 3.x,Django Models,Properties,我创建了一个函数,该函数实例化了一个封装某些通信的属性: 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模型中: cl

我创建了一个函数,该函数实例化了一个封装某些通信的属性:

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会在某个时候将类字段转换为实例字段。我搜索了他们的代码,但我迷路了。

问题是您使用的是可变dict
{}
作为默认值。改用
dict
,然后为每个实例实例化一个单独的空字典

data = JSONField(blank=True, default=dict)

有关更多信息,请参阅中的注释。

问题在于您使用的是可变dict
{}
作为默认值。改用
dict
,然后为每个实例实例化一个单独的空字典

data = JSONField(blank=True, default=dict)

有关更多信息,请参阅中的注释。

我对该属性一无所知,以至于没有查看字典。我将改变标题以反映真正的问题。谢谢你!我对这一财产一无所知,以至于没有看字典。我将改变标题以反映真正的问题。谢谢你!