Python Django-makemigrations-未检测到任何更改

Python Django-makemigrations-未检测到任何更改,python,django,django-migrations,Python,Django,Django Migrations,我试图使用makemigrations命令在现有应用程序中创建迁移,但它输出“未检测到任何更改” 通常,我使用startapp命令创建新应用,但在创建此应用时未将其用于此应用 调试后,我发现它没有创建迁移,因为某个应用缺少migrations包/文件夹 如果文件夹不存在或者我丢失了什么,那么创建文件夹会更好吗?要为应用程序创建初始迁移,请运行makemigrations并指定应用程序名称。将创建迁移文件夹 ./manage.py makemigrations <myapp> /ma

我试图使用makemigrations命令在现有应用程序中创建迁移,但它输出“未检测到任何更改”

通常,我使用
startapp
命令创建新应用,但在创建此应用时未将其用于此应用

调试后,我发现它没有创建迁移,因为某个应用缺少
migrations
包/文件夹


如果文件夹不存在或者我丢失了什么,那么创建文件夹会更好吗?

要为应用程序创建初始迁移,请运行
makemigrations
并指定应用程序名称。将创建迁移文件夹

./manage.py makemigrations <myapp>
/manage.py makemigrations

您的应用程序必须首先包含在安装的应用程序中(inside settings.py)。

有时,
/manage.py makemigrations
优于
/manage.py makemigrations
,因为它可以处理应用程序之间的某些冲突

这些情况悄无声息地发生,需要几个小时的
咒骂
才能理解可怕的
未检测到任何变化的消息的真正含义

因此,使用以下命令是更好的选择:


/manage.py makemigrations

我已经阅读了很多关于这个问题的答案,这些答案通常是简单地以其他方式运行
makemigrations
。但对我来说,问题在于模型的
Meta
子类

我有一个应用程序配置,上面写着
label=
(在
apps.py
文件中,在
models.py
旁边,
views.py
等)。如果您的元类与应用程序标签没有相同的标签(例如,因为您将一个太大的应用程序拆分为多个应用程序),则不会检测到任何更改(并且不会显示任何有用的错误消息)。因此,在我的模型课中,我现在有:

class ModelClassName(models.Model):

    class Meta:
        app_label = '<app name>' # <-- this label was wrong before.

    field_name = models.FloatField()
    ...
class ModelClassName(models.Model):
类元:

app_label=''这是一条评论,但可能应该是一个答案

确保你的应用程序名位于settings.py
INSTALLED_APPS
中,否则无论你做什么,它都不会运行迁移

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'blog',
]
然后运行:

./manage.py makemigrations blog
我的问题(以及解决方案)与上面描述的不同

我没有使用
models.py
文件,而是创建了一个
models
目录,并在那里创建了
my_model.py
文件,在那里我放置了我的模型。Django找不到我的模型,所以它写道没有可应用的迁移

我的解决方案是:在
我的app/models/\uuuuu init\uuuuu.py
文件中,我添加了这一行:
from.my_model import MyModel
django在
makemigrations
命令期间未检测到要迁移的内容,可能有多种原因

  • 迁移文件夹您的应用程序中需要一个迁移包
  • 已安装的应用程序您需要在
    已安装的应用程序
    中指定应用程序
  • Verbosity首先运行
    makemigrations-v3
    获取详细信息。这可能会对这个问题有所帮助
  • 完整路径
    已安装的应用程序中
    建议指定完整模块应用程序配置路径“apply.APPS.MyAppConfig”
  • --settings您可能需要确保设置了正确的设置文件:
    manage.py makemigrations--settings mysite.settings
  • 指定应用程序名称将应用程序名称显式放入
    manage.py makemigrations myapp
    ——这将缩小应用程序的迁移范围,并帮助您隔离问题
  • 模型元检查模型元中是否有正确的
    app\u标签

  • 调试django调试django核心脚本。makemigrations命令非常简单。相应地更改脚本定义(例如:
    makemigrations--tracebackmyapp

  • 多个数据库:
    • Db Router使用django Db Router时,Router类(您的自定义路由器类)需要实现
      allow\u syncdb
      方法
    makemigrations始终为模型更改创建迁移,但如果 allow_migrate()返回False


    我从django的外部复制了一个表,并且元类默认为“managed=false”。例如:

    class Rssemailsubscription(models.Model):
        id = models.CharField(primary_key=True, max_length=36)
        ...
        area = models.FloatField('Area (Sq. KM)', null=True)
    
        class Meta:
            managed = False
            db_table = 'RSSEmailSubscription'
    

    通过将
    managed
    更改为
    True
    makemigrations
    开始接收更改。

    我遇到了另一个这里没有描述的问题,这让我发疯

    class MyModel(models.Model):
        name = models.CharField(max_length=64, null=True)  # works
        language_code = models.CharField(max_length=2, default='en')  # works
        is_dumb = models.BooleanField(default=False),  # doesn't work
    
    我在一行中有一个尾随的“,”可能来自复制和粘贴。带有is_dumb的行没有创建带有“/manage.py makemigrations”的模型迁移,但也没有抛出错误。卸下后,它按预期工作


    因此,在复制和粘贴时要小心:-)

    解决方案是必须将应用程序包含在已安装的应用程序中

    我错过了,我发现了同样的问题

    指定我的应用程序名称后,迁移成功

    已安装的应用程序=[
    “django.contrib.admin”,
    “django.contrib.auth”,
    “django.contrib.contenttypes”,
    “django.contrib.sessions”,
    “django.contrib.messages”,
    “django.contrib.staticfiles”,
    “董事会”,
    ]
    

    请注意,我在最后提到了Board,这是我的应用程序名。

    我这样做解决了这个问题:

  • 删除“db.sqlite3”文件这里的问题是,您当前的数据库将被删除,因此您必须重新创建
  • 在已编辑应用程序的“迁移”文件夹中,删除上次更新的文件。请记住,第一个创建的文件是:“0001_initial.py”。例如:我创建了一个新类,并通过“makemigrations”和“migrate”过程注册它,现在创建了一个名为“0002_auto_etc.py”的新文件;把它擦掉
  • 转到“pycache”文件夹(位于迁移文件夹内)并
    INSTALLED_APPS = [
    
        'blog.apps.BlogConfig',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    
    ]
    
    apps/
       app/
          __init__.py
          app_sub1/
               __init__.py
               models.py
          app_sub2/
               __init__.py
               models.py
          app_sub3/
               __init__.py
               models.py
       app2/
          __init__.py
          app2_sub1/
               __init__.py
               models.py
          app2_sub2/
               __init__.py
               models.py
          app2_sub3/
               __init__.py
               models.py
        main_app/
          __init__.py
          models.py
    
    apps/
       app/
          __init__.py
          models.py <<<<<<<<<<--------------------------
          app_sub1/
               __init__.py
               models.py
          app_sub2/
               __init__.py
               models.py
          app_sub3/
               __init__.py
               models.py
       app2/
          __init__.py
          models.py <<<<<<<<<<--------------------------
          app2_sub1/
               __init__.py
               models.py
          app2_sub2/
               __init__.py
               models.py
          app2_sub3/
               __init__.py
               models.py
        main_app/
          __init__.py
          models.py
    
    class LineInOffice(models.Model):   # here
        addressOfOffice = models.CharField("Корхоная жош",max_length= 200)   #and here
        ...
    
    rm -r */migrations/*
    rm db.sqlite3
    python3 manage.py makemigrations
    No changes detected
    
    touch ads1/migrations/__init__.py
    
    class AccountInformation():
    
    class AccountInformation(models.Model):
    
    models
      ├── __init__.py          <--- empty
      ├── patient
      │   ├── __init__.py      <--- empty
      │   ├── breed.py
      │   └── ...
      ├── timeline
      │   ├── __init__.py      <-- empty
      │   ├── event.py
      │   └── ...
    
    from .deals import *
    from .dealers import *
    
    apps.deals
    
    cars.apps.deals
    
    python manage.py makemigrations
    python manage.py migrate
    
    field_model : models.CharField(max_length=255, ...)
    
    field_model = models.CharField(max_length=255, ...)
    
    class Foobar(models.Model):
        [...]
        something = models.BooleanField(default=False)
    
        [...]
        def something(self):
            return [some logic]
    
    class Meta:
       abstract = True