Добавление поля в существующую модель 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
модель без нарушения профилей пользователей.
любой идеи?
3 ответа:
нет встроенного способа сделать это. Однако есть ряд сторонних проектов, которые сделают это за вас. Два ведущих из них называются Южный и Джанго-эволюция, хотя есть и другие (в том числе тот, с которым я был связан, dmigrations).
Я определенно рекомендовал бы Юг - он имеет ряд действительно аккуратных функций и работает очень хорошо.
вы можете попробовать получить SQL для вашего нового поля с помощью:
manage.py sql appname
здесь
appname
- это имя приложения, в котором живет ваш газетный класс.затем вы можете вручную добавить поле в свой
appname_newspaper
таблицы, используяALTER TABLE
. Я не знаю, как это сделать непосредственно с Django, так как Django не поддерживает миграции.