django makemigrations 不识别新模型

25 浏览
0 Comments

django makemigrations 不识别新模型

我尝试使用makemigrations命令在现有应用程序中创建迁移,但它输出"未检测到任何更改"。通常,我使用startapp命令创建新的应用程序,但在创建这个应用程序时没有使用它。经过调试,我发现它没有创建迁移,因为应用程序中缺少migrations文件夹。如果没有这个文件夹的话,是否应该创建它,或者我漏掉了什么?

0
0 Comments

问题: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

0
0 Comments

在使用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无法识别新的模型时,可能是因为模型不在默认的查找路径中。解决方法是在相应的位置进行导入。

0
0 Comments

问题: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",
]

0