Подтвердить что ты не робот

Добавление поля в существующую модель 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, не нарушая профили пользователя.

Любые идеи?

4b9b3361

Ответ 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