django makemigrations 不识别新模型
问题:django的makemigrations命令无法识别新模型。
原因:
1. migration文件夹:需要在应用程序中添加一个migrations包。
2. INSTALLED_APPS:需要在INSTALLED_APPS字典中指定应用程序。
3. 详细信息:通过运行makemigrations -v 3命令来获得详细信息,这可能会揭示问题的原因。
4. 完整路径:在INSTALLED_APPS中,建议指定完整的模块应用程序配置路径'apply.apps.MyAppConfig'。
5. --settings:确保设置了正确的设置文件:manage.py makemigrations --settings mysite.settings。
6. 指定应用程序名称:显式地将应用程序名称放在manage.py makemigrations myapp中,这将只为该应用程序创建迁移,并帮助您隔离问题。
7. 模型元数据:检查模型元数据中是否有正确的app_label。
8. 调试django:调试django核心脚本。makemigrations命令非常直观。在pycharm中可以这样做。根据需要更改脚本定义(例如:makemigrations --traceback myapp)。
解决方法:
1. 多个数据库:当使用django db路由器时,路由器类(自定义路由器类)需要实现allow_syncdb方法。
2. 确保模型在网站的路由中使用(通过admin或其他方式)。“makemigrations脚本会查找从urls.py连接的模型”。
其他可能原因:
1. 导入错误的名称,例如从forms导入字段而不是fields,或从forms导入模型而不是models。
2. 模型类中缺少超类models.Model。
3. 模型在项目的其他地方被导入。
参考链接:
- https://stackoverflow.com/questions/43093651
- https://docs.djangoproject.com/en/4.0/ref/applications/#how-applications-are-loaded
在使用Django进行数据库迁移时,有些用户遇到了一个问题:django makemigrations无法识别新的模型。下面将介绍出现这个问题的原因以及解决方法。
其中一个用户的问题是,他并没有使用models.py文件,而是创建了一个名为models的文件夹,并在其中创建了my_model.py文件来存放模型。Django无法找到他的模型,所以显示没有需要迁移的内容。他的解决方法是,在my_app/models/__init__.py文件中添加了以下代码:
from .my_model import MyModel
这个解决方法对他来说有效,但他不明白为什么要这么做。他想知道可能是什么原因导致了这个问题。
事实上,Django有一个默认的模型查找路径。如果项目结构不同,模型不在通常的位置,就需要在相应的位置进行导入。
对于需要删除这样的模型,你可能需要删除相关的导入语句。这是一种项目结构的方式(不是唯一的方式),如果选择这种方式,就必须处理一些额外的任务。
还有一个用户提到,他已经删除了所有的导入和模型。当运行makemigrations
命令时,没有任何变化。这很奇怪,因为我并没有删除模型。也许尝试只对一个应用程序进行迁移,像这样:python manage.py makemigrations some_app
还有一个用户在使用"经典"模型结构后,迁移到了"模型文件夹"的结构,现有模型的迁移仍然被检测到。然而,当创建一个新的模型时,就会出现这个问题。上述解决方法可以解决问题,但会导致代码库有些不一致,因为有时候会有导入,有时候没有。也许有更好的解决方法。我猜Django应该提供一个设置项,可以设置用于查找新模型的文件夹列表。
通过以上整理,我们可以得出结论:当Django无法识别新的模型时,可能是因为模型不在默认的查找路径中。解决方法是在相应的位置进行导入。
问题:django的makemigrations命令无法识别新的模型
原因:如果应用程序没有migrations文件夹,需要指定应用程序的名称。这可能是因为应用程序是手动创建的,或者从以前没有迁移的较旧版本的Django升级而来。实际上,应用程序需要一个名为'migrations'的Python包(带有__init__.py)。
解决方法:在运行makemigrations命令之前,需要将应用程序添加到settings.py文件的INSTALLED_APPS列表中。
文章整理如下:
要为应用程序创建初始迁移,运行makemigrations命令并指定应用程序名称。这将创建一个migrations文件夹。
./manage.py makemigrations
首先,需要将应用程序添加到settings.py文件的INSTALLED_APPS列表中。
任何想知道为什么他们有时候会强制我们指定应用程序名称的想法?
如果应用程序没有migrations文件夹,需要指定应用程序名称。这可能是因为应用程序是手动创建的,或者从以前没有迁移的较旧版本的Django升级而来。
实际上,应用程序需要一个名为'migrations'的Python包(带有__init__.py)。
听起来像是Django应该自动处理的事情。
这是设计原则- Django并不假设您希望为应用程序创建迁移。如果它为所有应用程序创建迁移,可能会在运行迁移时出现错误。
这个问题让我调试了两天,而你的答案简单地解决了我的问题,我只是错误地认为makemigrations会自动应用到所有已安装的应用程序。
我遇到了类似的问题;我删除了migrations文件夹,所以如果发生这种情况,请检查您是否有一个包含__init__.py文件的migrations文件夹。
这个答案是正确的,你可能在你创建的django应用程序下创建了一个新的子应用程序,并忘记在settings.py中的INSTALLED_APPS中添加它。也许我有一个名为marketing的项目,在我的settings.py中,它可能是这样的。
INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "polymorphic", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "contacts", ]