Ошибка программирования при выполнении команды переноса в Django

#django #postgresql #django-models #django-migrations

#django #postgresql #django-модели #django-миграции

Вопрос:

Я внес некоторые изменения в свою модель, изменил CharField на arrayField. Я использую Django 2 и PostgreSQL 11. Теперь я получаю сообщение об ошибке при выполнении команды переноса: django.db.utils.Ошибка программирования: не удается преобразовать тип jsonb в символ, изменяющийся [] СТРОКА 1: …MN «msg_list» ВВЕДИТЕ varchar(500)[], ИСПОЛЬЗУЯ «msg_list»::varchar(…

Я погуглил тему, но не нашел никакого решения проблемы.

Вот код для моей модели:

 
class Sentence(models.Model):
    sent = models.CharField(max_length=150)
    msg_list = ArrayField(models.CharField(max_length=500), blank=True, null=True)
    sent_correct = models.CharField(max_length=300, blank=True)
    pub_date = models.DateTimeField(default=timezone.now)
 

Комментарии:

1. Похоже, что база данных, если она не может автоматически преобразовать существующие значения в массив, поэтому вы можете сделать это в несколько шагов. 1. Создайте новое поле массива msg_list2 . 2. Создайте миграцию данных, чтобы заполнить новое поле значениями из старого поля. 3. удалите старое поле. 4. Переименуйте новое поле в msg_list .

2. @Alasdair Если я удалю null= True, я получу другое сообщение об ошибке: вы пытаетесь изменить поле с нулевым значением ‘msg_list’ в предложении на ненулевое значение без значения по умолчанию; мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк). Пожалуйста, выберите исправление: 1) Теперь укажите одноразовое значение по умолчанию (будет установлено для всех существующих строк с нулевым значением для этого столбца) 2) Пока игнорируйте и позвольте мне самому обрабатывать существующие строки с NULL (например, потому что вы добавили операцию RunPython или RunSQL для обработки нулевых значений впредыдущая миграция данных) 3) Завершите работу и позвольте мне добавить значение по умолчанию в models.py

3. Выберите один из трех предложенных вам вариантов, например, выйти, добавить default=list в поле, затем повторно запустить makemigrations .