Хотите добавить один-к-одному столбцу в существующую таблицу - PullRequest
1 голос
/ 29 июня 2011

У меня в клиенте есть новое поле с именем note, которое имеет отношение один к одному с Notes. Я хочу иметь возможность добавить столбец заметки под таблицей клиента в MySQL. Это не работает, когда я использую python manage.py syncdb. Поэтому я хотел бы знать, как добавить однозначное поле в MySQL к существующей таблице.

models.py

class Note(models.Model):
    datetime = models.DateTimeField(default=datetime.now)
    user  = models.ForeignKey(User)
    note = models.TextField()

    def __unicode__(self):
        return unicode(self.name)

class Client(models.Model):
    note = models.OneToOneField(Note) # new
    def __unicode__(self)
       return unicode(self.user)

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Syncdb не меняет вашу базу данных, чтобы не уничтожить ваши данные. Смотри книгу Джанго .

Вы можете обновить базу данных вручную или использовать автоматический инструмент миграции (на свой страх и риск), например Юг .

EDIT: В книге django вы также можете прочитать подробные инструкции по ручным изменениям вместе с примерами SQL. Другая полезная информация может быть найдена в руководстве MySQL .

0 голосов
/ 29 июня 2011

Вы не сказали, как называется приложение, поэтому я предполагаю, что это fooapp.

Сначала рассмотрим SQL, который Django использовал бы для создания соответствующих таблиц:

python manage.py sql fooapp

Для дополнительных полей запустите команду sql:

ALTER TABLE fooapp_client ADD ...

где ... - объявление поля, которое вы видели в выводе "manage.py sql fooapp"

Не забудьте также выполнить любые команды индекса / ограничения в выводе "manage.py sql fooapp", которые работают с новым полем.

...