2016-02-26 2 views
3

Как обновить несколько строкДжанго - Массовое обновление arrayfield строки Postgres

Я модель,

class ModelA(models.Model): 
    colA = ArrayField(models.IntegerField()) 

Я хочу, чтобы обновить все строки Modela, то есть, например, для: - Я хочу добавить 1 во все строки столбца colA.

Если бы это был обычный столбец, я бы сделал следующее: -

ModelA.objects.all().update(colA="foo") 

Как я могу массовое обновление Arrayfield?

+0

Вы попробовали .update (colA = ["foo"])? Я имею в виду, что при запросе мы используем список. Поэтому, обновляя объем, то же самое можно использовать. Я не знаю .. Но догадаться. Пожалуйста, дайте мне знать .. – AceLearn

+0

Кажется, что документация django ничего не говорит об обновлении массивов. Поэтому мое предложение состоит в том, чтобы сделать сырой запрос вроде: 'update ModelA set colA = array_append (colA, 1)' –

ответ

-1

Почему не происходит миграция базы данных? Я считаю, что система миграции базы данных Django должна позволить вам сделать это легко.

0

Я не думаю, что его можно сделать в настоящее время, я думаю, что лучше всего вы можете сделать это, чтобы перебирать модели.

for model in ModelA.objects.all(): 
    for val in model_a.colA: 
     val = val + 1 
    model.save() 

Вы можете сделать это как атомная сделки, а если вы хотите .. Хотя это может быть стоит обратить внимание, если это поле действительно должно быть поле массива.

0

Вы можете попробовать использовать пакет django-bulk-update. Хотя я не уверен, может ли он обрабатывать ArrayField

Смежные вопросы