#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
.