Django makemigrations无法检测到新模型。

27

我之前使用makemigrations命令,让我的Django应用程序能够意识到遗留的MySql数据库中的表格,并且它也正常工作。它生成了models.py文件。现在,我想向我的应用程序添加一个新的"UserDetails"模型:

class UserDetails(models.Model):
    user = models.CharField(max_length=255)
    telephone = models.CharField(max_length=100)

保存文件后,我在命令提示符中运行了以下命令:

python manage.py makemigrations

但是makemigrations没有看到我在models.py中编写的新类,因为它始终输出“未检测到更改”。

我是否操作正确或者有什么地方出错了?我检查了我的MySQL数据库并确认没有名为UserDetails的表已经存在。


你的迁移文件夹里有什么东西吗?另外,你正在使用哪个版本的Django? - zanderle
我可以知道在哪里能找到迁移文件夹吗?谢谢。 - logeeks
1
它应该在你的应用文件夹中 your_app/migrations。另外,正如其他人所建议的那样 - 确保你的应用程序在 INSTALLED_APPS 中。 - zanderle
我需要把 models.py 放在包内吗?现在它与 manage.py 处于同一级别。 - logeeks
1
是的。您可以使用“./manage.py startapp <app_name>”命令来查看应用程序通常的外观。如果您仍然遇到问题,请在问题中粘贴您的结构,以便我们更好地帮助您。 - zanderle
10个回答

39

在开发过程中我遇到了这个问题,这种组合帮助了我:

python manage.py makemigrations mymodule

这个命令会为特定模块创建迁移文件。它应该在INSTALLED_APPS中,如果不在那里,你会收到警告。

python manage.py migrate

另外,提及xiaohen的答案,我已使用PyCharm创建了包,因此默认情况下得到了init.py文件。


17

我在使用Django 1.11时遇到了类似的问题(添加新模型时显示“未检测到更改”),通过在models包中的__init__.py中导入新模型(实际上最好是导入所有模型)解决了该问题:

我在使用 Django 1.11 时也遇到了类似的问题(当添加新模型时显示“未检测到更改”),我通过在 models 包中的 __init__.py 文件中导入新模型(甚至最好是导入所有的模型)来解决这个问题:

from .student import Student
from .teacher import Teacher

这里写着:


如果您在包含“admin”类的文件夹中的“init.py”中添加了“import”,这也将起作用。 - Nitin Nain

4

确保你的应用已在settings.py文件中注册,如果已注册,尝试运行:

 python manage.py makemigrations "app_name"

相关文档请参考:https://docs.djangoproject.com/en/3.2/topics/migrations/#adding-migrations-to-apps - JHS

3

首先,您需要运行python manage.py makemigrations命令,其次,您需要运行python manage.py migrate命令来同步数据库。

如果您使用mkdir命令创建一个文件夹来保存您的模型,您需要将其添加到__init__.py文件中。


我已经完成了,它显示“没有可应用的迁移”。 - logeeks

2

为使makemigrations正常工作,models.py文件需要放在应用程序包中而不是主目录中。


1
除了上面提供的答案之外,如果问题仍未解决,请确保您的迁移目录在应用程序文件夹中可用。如果不存在,请确保创建一个并确保创建一个名为__init__.py的文件,以便Python解释器能够识别该目录是Python目录。如果我误用了某些术语,请编辑。希望这可以帮助到您。

1
当您忘记在setting.py文件中注册应用程序时,就会出现这种情况。

1

如果你有两个指向同一模型的ForeignKey,但没有related_name来区分它们,那么可能会出现问题。例如:

fk1 = models.ForeignKey(OtherModel)
fk2 = models.ForeignKey(OtherModel)

Django应该会给你一个警告:HINT: 在'app.Model.fk1'或'app.Model.fk2'的定义中添加或更改related_name参数。

但我直到重新启动django才看到它。


0
此外,请注意,当模型的 Meta 类中设置 abstract 属性为 True 时,该模型将被 makemigrations 忽略。
请检查该属性是否设置为 False 或将其完全删除。

0
我想补充一点:如果模型的元类有一个 app_label,并且它与 INSTALLED_APPS 标签不同,那么它将失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接