Литерал некорректного массива django: - PullRequest
0 голосов
/ 07 марта 2019

У меня маленькая проблема:

У меня есть эта модель:

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

Я хочу обновить это поле:

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

но у меня есть эта ошибка:

Traceback (последний вызов был последним): File "/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 ": "Эк"}} "

как я могу это решить?

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Вам нужен экземпляр myModel, чтобы сохранить это.Например, что-то вроде:

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

Я подозреваю, что там есть какой-то дополнительный код, который неочевиден, data - это dict, но тогда вы вызываете saveкоторый обычно поднимает AttributeError.Кроме того, я предполагаю, что в вашем исходном коде myModel не является экземпляром myModel, а является самой моделью, и поэтому вы не можете работать с ней напрямую, вам нужен экземпляр, представляющий строку базы данных.

Когда у вас есть экземпляр myModel, вы можете сделать:

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

Просто, чтобы прояснить это и в моем ответе, необходимо убедиться, что поле базы данных совпадает с полем, объявленным в вашеммодель, проверьте, что вы создали миграции и применили их для всех ваших последних изменений.

0 голосов
/ 07 марта 2019

Вам необходимо использовать PostgreSQL.Я пытался до сих пор, у меня работает

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

test = myModel()
test.myField=data
test.save()
...