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