Добавление поля в существующую модель Django
У меня есть небольшой сайт с несколькими пользователями, и я бы хотел добавить поле к одной из моих моделей (и, следовательно, к таблицам.) Проблема в том, что syncdb
, конечно, не коснется существующих моделей, а я 'пытается выяснить, как добавить это поле в модель/таблицу, не переписывая все это.
Пример:
class Newspaper(models.Model):
name = models.CharField()
class UserProfile(models.Model):
user = models.ForeignKey(user, unique=True)
reads = models.ManyToManyField(Newspaper)
Теперь я хотел бы добавить поле URL (blank=True
) в модель Newspaper
, не нарушая профили пользователя.
Любые идеи?
Ответы
Ответ 1
Нет никакого встроенного способа сделать это. Однако существует ряд сторонних проектов, которые сделают это для вас. Две ведущие называются South и django-evolution, хотя есть и другие другие (включая тот, с которым я был связан, dmigrations).
Я бы определенно рекомендовал South - у него есть несколько действительно опрятных функций и работает очень хорошо.
Ответ 2
Вы можете попробовать получить SQL для своего нового поля, используя:
manage.py sql appname
Где appname
- название приложения, в котором живет ваш газетный класс.
Затем вы можете вручную добавить поле в таблицу appname_newspaper
, используя ALTER TABLE
. Я не знаю, как это сделать непосредственно с Django, поскольку Django не поддерживает миграции.
Ответ 3
2015 ответ:
Выполните следующее:
python manage.py makemigrations
python manage.py migrate