Как мне внести изменения в модель в Django? - PullRequest
1 голос
/ 02 июля 2011

Как Django обрабатывает изменения в моей модели?Или какая помощь мне предлагает это сделать?

Я думаю о ситуации, когда у меня уже есть опубликованные данные в моей БД, которые я не хочу потерять, но мне нужно внести изменения вмоя модель данных - например, добавление дополнительных полей к определенному классу, изменение типов полей и т. д. Насколько я понимаю, syncdb никогда не будет изменять таблицы, которые уже существуют в БД.

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

class Person(models.Model):
    name = models.CharField(max_length=200)
    phone_number=models.CharField(max_length=200)
    hair_colour=CharField(max_length=50)

Вещи, которые я мог бы сделать, чтобы Person от макушки головы:

  1. Я хочу добавить поле 'age'.
  2. Я понимаю, что хочу использовать IntegerField вместо CharField для phone_number (является ли это хорошей идеей или нет, выходит за рамки ...) - предполагая, что это возможно.
  3. Я понимаю, что больше не хочу определять hair_colour 'inline' в Person, потому что несколько человек имеют один и тот же цвет волос - вместо этого я хочу изменить его, чтобы он стал внешним ключом для какой-либо другой модели.

Хотя я могу представить, что некоторые из нихgh / невозможно для фреймворка «угадать», что именно нужно сделать с моими данными, если все, что я делаю, - это обновляю models.py, я могу представить, что еще может быть какой-то инструментарий, помогающий включить его - существует ли он?

В частности, я полагаю, что для варианта 1 должно быть несколько хороших шаблонов.

Я очень плохо знаком с Django и не имею опыта работы с другими вещами типа ORM, которые, я думаю, это -Я всегда с подозрением относился к ORM, в основном по вышеуказанным причинам:)

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Сам Django не будет пытаться изменить уже созданную таблицу базы данных.То, что вы пытаетесь сделать, обычно называется «Миграция», и для Django есть несколько различных инструментов миграции базы данных.

Юг

  • Миграции схемы
  • Миграции данных
  • Обратные миграции

Наш Вегас

  • Схемы миграции
  • Миграции данных

Django Evolution

  • Миграции схемы
  • Миграции данных (Неизвестно)
  • Обратные миграции (Неизвестно)

Из трех стран Юга, вероятно, наиболее широко используются, но у каждого из них разные способы борьбы с миграциями.Вы можете увидеть более подробную информацию о сравнении на Django Packages .

1 голос
/ 02 июля 2011

Многое из того, о чем вы спрашиваете, можно сделать с помощью проекта django Юг . Вы добавляете это как INSTALLED_APP. Создайте базовую линию, затем при изменении вашей модели создаются операторы SQL для преобразования ваших таблиц и строк с таблицами в новый формат модели.

...