我有一个带有My-SQL数据库的Django应用程序。最近,我在MySQL-shell中的MySQL查询的帮助下修改了table_name,之后,当我运行makemigration和迁移命令时,终端显示“没有检测到更改”。我如何解决这个问题,并在Django makemigration和migrate的帮助下重新创建这个表?
我可以从MySQL中删除一个表吗,可能是Django再次创建?
发布于 2021-07-22 14:45:45
如果你在Django之外重命名了你的表--你必须像这样告诉Django新的表名(使用Meta类):
class Model(models.Model):
name = models.CharField(max_length=255)
class Meta:
db_table = 'new_table_name'要使用现有模型重新创建表,需要将该应用程序的迁移重置为零,然后再次运行迁移
python manage.py migrate APP_NAME zero
python manage.py migrate APP_NAME发布于 2021-07-22 14:08:02
这是因为django管理的迁移表没有反映正确的数据库模式,因为它已经在django之外修改过了。如果您没有任何重要数据,您可以进行迁移、回滚或手动重新创建表。
最好的删除方法是将你的表重命名回原来的名称。然后在应用程序中创建一个空迁移,并在该迁移文件中重新创建您在shell中执行的sql命令。这样,django就可以跟踪数据库模式。
发布于 2021-07-22 14:11:53
您应该在models.py中更改表名,而不是在MySQL shell中。
从…
class MyModel(models.Model):
...至
class ThisModel(models.Model):
...或创建代理模型:
class ThisModel(MyModel):
class Meta:
proxy = True
verbose_name = "ThisModel"https://stackoverflow.com/questions/68479893
复制相似问题