Я хотел бы изменить имя определенных полей в модели:
class Foo(models.Model):
name = models.CharField()
rel = models.ForeignKey(Bar)
должен измениться на:
class Foo(models.Model):
full_name = models.CharField()
odd_relation = models.ForeignKey(Bar)
Что самый легкий путь состоит в том, чтобы сделать это использование на юг?
Вы можете использовать функцию db.rename_column
.
class Migration:
def forwards(self, orm):
# Rename 'name' field to 'full_name'
db.rename_column('app_foo', 'name', 'full_name')
def backwards(self, orm):
# Rename 'full_name' field to 'name'
db.rename_column('app_foo', 'full_name', 'name')
Первый аргумент db.rename_column
- это имя таблицы, поэтому важно помнить, как Django создает имена таблиц :
Django автоматически получает имя таблицы базы данных от имени вашего класса модели и приложения, которое его содержит. Имя таблицы базы данных модели создается путем присоединения «метки приложения» модели - имени, которое вы использовали в manage.py startapp - к имени класса модели с подчеркиванием между ними.
В случае, если у вас есть многословное название модели с верблюжьим регистром, такое как ProjectItem, имя таблицы будет app_projectitem
(т. Е. Между project не будет вставляться подчеркивание.
и товар
, даже если они в верблюжьей оболочке).
Я не знал о столбце db.rename, звучит удобно, однако в прошлом я добавлял новый столбец как одну схему миграции, а затем создавал миграцию данных для перемещения значений в новое поле, затем вторая миграция схемы для удаления старого столбца