首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django makemigrations显示在mysql中重命名表后未检测到任何更改

Django makemigrations显示在mysql中重命名表后未检测到任何更改
EN

Stack Overflow用户
提问于 2021-07-22 14:03:18
回答 3查看 47关注 0票数 0

我有一个带有My-SQL数据库的Django应用程序。最近,我在MySQL-shell中的MySQL查询的帮助下修改了table_name,之后,当我运行makemigration和迁移命令时,终端显示“没有检测到更改”。我如何解决这个问题,并在Django makemigration和migrate的帮助下重新创建这个表?

我可以从MySQL中删除一个表吗,可能是Django再次创建?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-22 14:45:45

如果你在Django之外重命名了你的表--你必须像这样告诉Django新的表名(使用Meta类):

代码语言:javascript
复制
class Model(models.Model):
    name = models.CharField(max_length=255)

    class Meta:
        db_table = 'new_table_name'

要使用现有模型重新创建表,需要将该应用程序的迁移重置为零,然后再次运行迁移

代码语言:javascript
复制
python manage.py migrate APP_NAME zero
python manage.py migrate APP_NAME
票数 0
EN

Stack Overflow用户

发布于 2021-07-22 14:08:02

这是因为django管理的迁移表没有反映正确的数据库模式,因为它已经在django之外修改过了。如果您没有任何重要数据,您可以进行迁移、回滚或手动重新创建表。

最好的删除方法是将你的表重命名回原来的名称。然后在应用程序中创建一个空迁移,并在该迁移文件中重新创建您在shell中执行的sql命令。这样,django就可以跟踪数据库模式。

票数 0
EN

Stack Overflow用户

发布于 2021-07-22 14:11:53

您应该在models.py中更改表名,而不是在MySQL shell中。

从…

代码语言:javascript
复制
class MyModel(models.Model):
   ...

代码语言:javascript
复制
class ThisModel(models.Model):
   ...

或创建代理模型:

代码语言:javascript
复制
class ThisModel(MyModel):
    class Meta: 
       proxy = True 
       verbose_name = "ThisModel"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68479893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档