在 Django 中重命名模型(表)

Posted

技术标签:

【中文标题】在 Django 中重命名模型(表)【英文标题】:Renaming models(tables) in Django 【发布时间】:2015-01-26 07:30:48 【问题描述】:

所以我已经在 Django 中为我的数据库创建了模型,但现在想重命名模型。我已经更改了 Meta 类中的名称,然后进行迁移/迁移,但这只会创建全新的表。

我也尝试过架构迁移,但也没有工作,我使用的是 Django 1.7

这是我的模型

class ResultType(models.Model):
    name = models.CharField(max_length=150)
    ut = models.DateTimeField(default=datetime.now)
    class Meta:
       db_table = u'result_type'

    def __unicode__(self):
        return self.name

干杯

【问题讨论】:

【参考方案1】:

Django 不知道你在做什么。默认情况下,它将删除旧表并创建新表。 需要创建一个空的migration,然后使用这个操作(需要自己写):

https://docs.djangoproject.com/en/stable/ref/migration-operations/#renamemodel

类似这样的:

from django.db import migrations

class Migration(migrations.Migration):

    dependencies = [
        ('yourappname', '0001_initial'),
    ]

    operations = [
        migrations.RenameModel("OldName", "NewName")
    ]

【讨论】:

我认为我的 django 不同步,错误“您的模型具有尚未反映在迁移中的更改,因此不会应用。运行“manage.py makemigrations”以创建新的迁移,然后重新运行 'manage.py migrate' 以应用它们”我已经删除了所有 0001_initial.py 然后用我的新类创建了一个迁移.. 我想重命名一个表,因为我正在重命名应用程序。我怎样才能做到这一点? 所以要创建一个空迁移:./manage.py makemigrations --empty myapp. NameError: name 'operations' is not defined。该文档没有任何示例,因此不是很有用。 在this question之后,上面的operations(列表内)似乎应该是migrations。我改变了那个词,我的代码就起作用了。

以上是关于在 Django 中重命名模型(表)的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQL 中重命名外键列

django:如何在管理面板中重命名记录

在不破坏现有迁移的情况下重命名 Django 模型

在 MySQL 中重命名表

如何在 Bigtable 中重命名表?

是否可以在 Firebird 中重命名表?