Как добавить новое поле в существующую модель django postgres - PullRequest
0 голосов
/ 16 октября 2019

Предположим, у меня есть следующая модель:

class Test(models.Model):
   field_one = models.CharField(max_length=80)

Теперь мы создали 2-3 объекта модели с полем field_one.

p1 = Test(field_one="Object1")
p1.save()
p2 = Test(field_one="Object2")
p2.save()

Позже я понял, чтоМне нужно добавить еще одно поле field_two в мою Test модель.

class Test(models.Model):
   field_one = models.CharField(max_length=80)
   field_two = models.IntegerField(default=3)
  • Сейчас, Doing makemigrations & migrate и работающий сервер.

которая выдает следующую ошибку

django.db.utils.ProgrammingError: column mainapp_test.field_two does not exist
  • Я понимаю, что эта ошибка возникает из-за того, что у моих 2 существующих объектов в PostGresDB нет столбца field_two.

Есть ли эффективный способ добавить столбец field_two в мои существующие объекты с некоторым значением по умолчанию? или как решить эту проблему?

Django Версия: 2.0 Django ORM DB: PostGresql

1 Ответ

1 голос
/ 16 октября 2019

Когда вы добавляете поле в существующую модель, вы должны либо указать в коде значение по умолчанию, либо задать для него значение null / blank = True, либо указать одноразовое значение по умолчанию при переносе.

Поскольку вы предоставляете код по умолчанию, миграция должна выполняться без проблем. По крайней мере, из опыта, я добавил несколько BooleanFields с default=False к моей существующей модели с тысячами записей, и у меня никогда не было ошибки ProgrammingError.

Вы пытались завершить работу бэкэнда Postgres перед запуском makemigrationsи migrate? Я думаю, что Django сделает это, но это единственное, о чем я могу думать. Также, очевидно, выключите сервер Django, если он все еще работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...