Django - Как переименовать образцовое поле с помощью Юга?

Я хотел бы изменить имя определенных полей в модели:

class Foo(models.Model):
    name = models.CharField()
    rel  = models.ForeignKey(Bar)

должен измениться на:

class Foo(models.Model):
    full_name     = models.CharField()
    odd_relation  = models.ForeignKey(Bar)

Что самый легкий путь состоит в том, чтобы сделать это использование на юг?

208
задан Serjik 18 December 2015 в 22:58
поделиться

2 ответа

Вы можете использовать функцию 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 не будет вставляться подчеркивание. и товар , даже если они в верблюжьей оболочке).

230
ответ дан 23 November 2019 в 04:41
поделиться

Я не знал о столбце db.rename, звучит удобно, однако в прошлом я добавлял новый столбец как одну схему миграции, а затем создавал миграцию данных для перемещения значений в новое поле, затем вторая миграция схемы для удаления старого столбца

15
ответ дан 23 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: