Добавление поля в существующую модель Django - PullRequest
51 голосов
/ 06 мая 2009

У меня есть небольшой веб-сайт с несколькими пользователями, и я хотел бы добавить поле для одной из моих моделей (и, следовательно, таблиц). Проблема в том, что 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 ]

38 голосов
/ 12 мая 2009

Нет встроенного способа сделать это. Однако есть ряд сторонних проектов, которые сделают это за вас. Два ведущих из них называются Юг и Джанго-Эволюция , хотя есть и другие (включая одного, с которым я был связан, миграция).

Я бы определенно порекомендовал Юг - он обладает множеством действительно интересных функций и работает очень хорошо.

18 голосов
/ 06 мая 2009

Вы можете попробовать получить SQL для вашего нового поля, используя:

manage.py sql appname

Где appname - название приложения, в котором проживает ваш класс газеты.

Затем вы можете вручную добавить поле в таблицу appname_newspaper, используя ALTER TABLE. Я не знаю, как сделать это напрямую с Django, поскольку Django не поддерживает миграцию.

1 голос
/ 29 ноября 2015

2015 ответ:

Запустите следующее:

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