Изменение типа данных Django в моделях без опускания таблицы - PullRequest
4 голосов
/ 21 марта 2011

Я создал приложение Django. Теперь я хотел изменить тип поля для 1 из моего поля БД в моделях. Поскольку в базе данных уже есть записи с данным типом, я думаю, что изменить тип невозможно, просто изменив его в models.py. Погуглив, я узнал, что это можно изменить, не удаляя таблицы, изменив его через консоль sql. Но, будучи новичком в Django, я не могу этого сделать. Может ли кто-нибудь помочь мне сделать это? Это мои models.py

class EmployeeDetails(models.Model):
    userName = models.CharField(max_length=200)
    designation = models.CharField(max_length=200)
    employeeID = models.IntegerField()
    contactNumber = models.CharField(max_length=200)
    project = models.CharField(max_length=200)
    dateOfJoin=models.TextField()

Теперь я хочу изменить dateOfJoin = models.DateField (). Как я могу изменить TextFieild на DateField, не удаляя таблицу с помощью команд консоли sql?

Ответы [ 3 ]

18 голосов
/ 21 марта 2011

Требуемое приложение: Юг
Вот шаги (см. Документацию):

./manage.py convert_to_south yourapp 

это создаст папку миграции и подделаетпервая миграция

Затем добавьте new_dateOfJoin DateField в вашем models.py:

./manage.py migrate yourapp 

, это немедленно создаст и применит миграцию (с именем 0002 _...), чтобы добавить это поле вthe db

Создайте файл datamigration 0003 , где вы просто приведете свое текстовое значение к дате и сохраните его в новом поле. Затем примените эту миграцию:

./manage.py migrate yourapp

Измените файл models.py, чтобы закомментировать старое поле даты и выполнить миграцию снова (это создаст файл миграции 0004 _....)

Последний шаг - переименовать поле db, чтобы вам не приходилосьизмените существующий код:

./manage.py schemamigration yourapp rename_dateofjoin --empty

Это создаст пустой файл миграции схемы с именем 0005_rename_dateofjoin
Вручную измените этот файл 0005, как описано здесь , но используйте db.rename_column('app_foo', 'name', 'full_name'), какв этот другой пример .

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

2 голосов
/ 21 марта 2011

Проект South обычно используется для переноса схем и данных. Я не уверен, что его можно использовать для преобразования текстового поля в поле даты, но я не удивлюсь, если это удастся.

0 голосов
/ 23 марта 2011

У меня это работает по-другому.Я выбрал свою базу данных через консоль SQL и добавил новые столбцы с запросом SQL.И это сработало очень хорошо :), большое спасибо за помощь, которую вы, ребята, дали ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...