我有一个名为A的模型。当b属性设置为该模型时,我想像这样更新该属性:
# Note that PGJSONField is a field that can store string or json.
class A(models.Model):
description = PGJSONField(blank=True, null=True)
def __setattr__(self, key, val):
if key == 'description':
val = {'description': val}
super(A, self).__setattr__(key, val)
这会导致副作用。当我从DB获取模型实例时。如果不是,则将描述密钥设置为dict事件。
>>> a = A.objects.first()
>>> a.description
..: {"description": "lorem ipsum"}
我期望的行为是这样的:
>>> a = A.objects.first()
>>> a.description
..: "lorem ipsum"
>>> a.description = "foo bar"
>>> a.description = {"description": "foo bar"}
我认为在获取模型时我必须通过 _setattr 方法,但我找不到办法。有什么建议吗?
答案 0 :(得分:0)
尝试这种模型结构,它将使您的存储有效 如果不需要数据安全性
class A(models.Model):
name = models.CharField(max_length=50)
class KeyVal(models.Model):
container = models.ForeignKey(A)
key = models.CharField(max_length=240, db_index=True)
value = models.CharField(max_length=240, db_index=True)
因此,如果您知道A表中的名称,您可以获得所有键值对,键列表,值列表