Добавление поля в существующую модель 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 51

3 ответа:

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

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

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

manage.py sql appname

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

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

2015 ответ:

выполнить следующее:

python manage.py makemigrations
python manage.py migrate