1

我有一个小问题:

我有这个模型:

class myModel(models.Model):
    myField =JSONField()

我想更新这个字段:

data={'rda': {'punti': 0, 'rank': 1, 'pos': 'eq'}}
a =myModel()
a.myField=data
a.save()

但我有这个错误:

回溯(最后一次调用):文件“/home/hy0/.conda/envs/ciclods_env/lib/python3.7/site-packages/django/db/backends/utils.py”,第 85 行,在 _execute return self .cursor.execute(sql, params) psycopg2.DataError: 格式错误的数组字面量:"{"rda": {"punti": 0, "rank": 1, "pos": "eq"}}"

我该如何解决?

4

3 回答 3

0

我有这个确切的问题,这篇文章是我能找到的唯一参考。我不确定原因是什么,但我最终通过删除新数据库的迁移脚本来修复它。

如果您遇到此错误,请尝试删除最后几个迁移脚本,直到找到罪魁祸首。或者,您可以像我一样重新开始,它应该会再次起作用。

于 2019-12-17T04:32:46.533 回答
0

您必须需要使用 PostgreSQL。到目前为止我试过了,它对我有用

data = {  
    'rda':{  
        'punti':0,
        'rank':1,
        'pos':'eq'
    }
}

test = myModel()
test.myField=data
test.save()
于 2019-03-07T11:27:18.327 回答
0

您需要一个实例myModel来存储它。例如:

myModel.objects.create(myField={'rda': {'punti': 0, 'rank': 1, 'pos': 'eq'}})

我怀疑那里有一些额外的代码并不明显,data是 adict但是你调用save它通常会引发一个AttributeError. 另外我猜在你的原始代码myModel中不是一个实例,myModel而是模型本身,所以你不能直接对它进行操作,你需要一个代表数据库行的实例。

一旦有了 的实例myModel,您可以执行以下操作:

a_model = myModel()
a_model.myField = {'rda': {'punti': 0, 'rank': 1, 'pos': 'eq'}}
a_model.save()

只是为了在我的回答中明确这一点,您需要确保数据库字段与模型中声明的字段匹配,检查您是否已生成迁移并将它们应用于所有最新更改。

于 2019-03-07T11:29:04.233 回答