Django Migrations: изменение поля модели после использования базы данных - PullRequest
0 голосов
/ 30 января 2019

Я создал веб-приложение Django, в котором есть модели и много экземпляров моделей.Проблема в том, что я хочу добавить другое поле к одной из моделей, которые уже используются (более 1000 экземпляров).У меня был трудный опыт работы с Django Migrations в прошлом, и я боюсь, что если я изменю модель, добавив поле, мое веб-приложение не будет работать.

Как изменить модель таким образом, чтобы онане повлияет на функциональность моего веб-приложения?

1 Ответ

0 голосов
/ 31 января 2019

следующее должно решить вашу проблему без каких-либо проблем.

Вы можете проверить правильность заполнения данных, проверив поля в django admin, если это необходимо.

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

Надеюсь, это поможет!


По умолчанию:

Models.py

class ExampleModel(models.Model):
    name = models.CharField(blank=True, null=True)

Первое изменение:

Models.py

class ExampleModel(models.Model):
    name = models.CharField(blank=True, null=True)
    unique_str = models.CharField(blank=True, null=True) # add this here

Выполнить:

python manage.py makemigrations
python manage.py migrate

Затем вы можете запустить скрипт для заполнения вашего unique_str:

# get all model instances
example_models = ExampleModel.objects.all()

# update each unique_str as required
for e in example_models:
    e.unique_str = e.pk # add any required logic here to assign value to this variable
    e.save()

Наконец:

Models.py

class ExampleModel(models.Model):
    name = models.CharField(blank=True, null=True)
    unique_str = models.CharField(blank=True, null=True, unique=True) # add unique

, а затем снова выполните:

python manage.py makemigrations
python manage.py migrate
...