django sync db question - PullRequest
       13

django sync db question

2 голосов
/ 25 мая 2010

В моделях django говорят, что эта модель существует в деталях / models.py

    class OccDetails(models.Model):
       title = models.CharField(max_length = 255)
       occ = models.ForeignKey(Occ)

Таким образом, когда производится синхронизация дБ, создаются следующие поля

, а затем к этому добавляются еще два поля и выполняется синхронизация дБ, новые поля не создаются. Как это решить, а также то, что auto_now = true в приведенном ниже

это новые поля

         created_date = models.DateTimeField(auto_now_add=True)
         modified_date = models.DateTimeField(auto_now_add=True, auto_now=True)

Ответы [ 2 ]

7 голосов
/ 25 мая 2010

syncdb создает таблицы базы данных для всех приложений в INSTALLED_APPS, таблицы которых еще не были созданы.

Syncdb не изменит существующие таблицы
syncdb будет создавать таблицы только для моделей, которые еще не установлены. Он никогда не будет выдавать операторы ALTER TABLE, соответствующие изменениям, внесенным в класс модели после установки. Изменения в модельных классах и схемах баз данных часто включают некоторую двусмысленность, и в этих случаях Django должен был бы угадать, какие именно изменения следует внести. Существует риск того, что важные данные будут потеряны в процессе.

вы можете либо

  • Выпустить руководство ALTER TABLE Команда
  • DROP TABLE конкретной таблицы (потеряет данные) и снова запустите syncdb
  • запустить django-admin sqlclear , чтобы получить список операторов sql для очистки всего БД и выполнить эти команды (сбросит БД - вы потеряете все существующие данные) или

DateField.auto_now: автоматически устанавливает поле на NOW() каждый раз, когда объект сохраняется. Полезно для отметок времени последнего изменения. Обратите внимание, что текущая дата всегда используется; это не просто значение по умолчанию, которое вы можете переопределить.

Таким образом, столбец modified_date будет автоматически обновляться при каждом вызове object.save()

3 голосов
/ 25 мая 2010

Это общая проблема с Django. Как сказал Амаргош, syncdb не может изменять схему существующих таблиц.

Юг был создан для решения этой проблемы.

Я рекомендую это.

...