Dil*_*raj 101 python django django-migrations
使用现有应用程序,我尝试使用makemigrations命令创建迁移,但它显示"未检测到任何更改".
通常我使用startapp命令创建新的应用程序但这个特定的应用程序不是.
经过一段时间的调试后,我发现它没有创建迁移,因为migrations应用程序中缺少包/文件夹.
如果不存在或者我错过了某些东西,它会更好地创建文件夹
Ala*_*air 204
要为应用程序创建初始迁移,请运行makemigrations并指定应用程序名称.将创建迁移文件夹.
./manage.py makemigrations <myapp>
Run Code Online (Sandbox Code Playgroud)
您的应用必须首先包含在内INSTALLED_APPS(settings.py内).
Kar*_*ūtė 32
我的问题(以及解决方案)与上述问题有所不同.
我没有使用models.py文件,但创建了一个models目录并在my_model.py那里创建了文件,我放置了我的模型.Django无法找到我的模型,所以它写道没有要应用的迁移.
我的解决方案是:在my_app/models/__init__.py文件中我添加了这一行:
from .my_model import MyModel
小智 30
django在makemigrations命令期间未检测到要迁移的内容有多种可能的原因.
INSTALLED_APPS.dict中指定您的应用程序makemigrations -v 3争取冗长.这可能会对这个问题有所了解.INSTALLED_APPS建议指定完整模块应用程序配置路径'apply.apps.MyAppConfig'manage.py makemigrations --settings mysite.settings manage.py makemigrations myapp- 这会缩小应用程序的迁移范围,并帮助您隔离问题.模型元检查你app_label在模型元中有权利
调试django调试django核心脚本.makemigrations命令非常简单.以下是如何在pycharm中执行此操作.相应地改变你的脚本定义(例如:makemigrations --traceback myapp)
allow_syncdb方法.makemigrations总是为模型更改创建迁移,但如果allow_migrate()返回False,
one*_*sec 26
我已经阅读了很多这个问题的答案,经常说明只是makemigrations以其他方式运行.但对我来说,问题出在Meta模型的子类中.
我有一个应用程序的配置,说label = <app name>(中apps.py文件,旁边models.py,views.py等).如果您的元类没有与app标签具有相同的标签(例如,因为您将一个太大的应用程序拆分为多个应用程序标签),则不会检测到任何更改(并且没有任何有用的错误消息).所以在我的模型课中我现在有:
class ModelClassName(models.Model):
class Meta:
app_label = '<app name>' # <-- this label was wrong before.
field_name = models.FloatField()
...
Run Code Online (Sandbox Code Playgroud)
在这里运行Django 1.10.
Sus*_*tri 14
方法:1
步骤1
确保您的应用程序必须包含在INSTALLED_APPSsettings.py 中
步骤:2
python manage.py makemigrations <appname>
Run Code Online (Sandbox Code Playgroud)
如果显示相同的消息(未检测到更改)
!警告这对于您的项目来说非常危险,因此在应用方法 2 之前请确保您已经备份了您的项目。
方法二
重命名您的应用程序名称并使用以下命令创建新应用程序:
django-admin startapp <appname>
Run Code Online (Sandbox Code Playgroud)
复制旧应用程序中的所有.py文件except
并粘贴到您最近制作的新应用程序中
请记住,您必须为新应用程序指定完全相同的名称,否则您必须在项目中进行更多更改。
sur*_*190 12
这是一个评论,但应该是一个答案.
确保您的应用名称在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',
]
Run Code Online (Sandbox Code Playgroud)
然后运行:
./manage.py makemigrations blog
Run Code Online (Sandbox Code Playgroud)
有时./manage.py makemigrations优势是./manage.py makemigrations <myapp>因为它可以处理应用程序之间的某些冲突.
这些场合是默默无闻的,需要几个小时swearing才能理解可怕No changes detected消息的真正含义.
因此,使用以下命令是一个更好的选择:
./manage.py makemigrations <myapp1> <myapp2> ... <myappN>
另一个可能的原因是,如果您在另一个文件(而不是包中)中定义了一些模型,并且没有在其他任何地方引用它。
对我来说,只需添加from .graph_model import *(admin.py新graph_model.py文件在哪里)就可以解决问题。
我的问题比上述答案简单得多,而且只要您的项目已经设置并正常工作,这可能是一个更常见的原因。在我运行了很长时间的一个应用程序中,迁移似乎很不稳定,所以我匆忙做了以下操作:
rm -r */migrations/*
rm db.sqlite3
python3 manage.py makemigrations
No changes detected
Run Code Online (Sandbox Code Playgroud)
什么??
我还错误地删除了所有__init__.py文件:( - 我进去后一切又恢复了:
touch ads1/migrations/__init__.py
Run Code Online (Sandbox Code Playgroud)
对于我的每个应用程序,然后makemigrations再次工作。
事实证明,我已经手动通过复制另一个创建了一个新的应用程序,忘了把__init__.py中migrations文件夹和confinved我,一切都是靠不住的-我的领导让情况变得更糟与rm -r如上所述。
希望这可以帮助某人在几个小时内对“未检测到更改”错误发誓。
我还有另一个这里未描述的问题,这让我发疯。
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
Run Code Online (Sandbox Code Playgroud)
我在复制和粘贴的一行中有一个尾随的“”。is_dumb所在的行不会使用'./manage.py makemigrations'创建模型迁移,但也不会引发错误。删除'后,它按预期方式工作。
因此,在复制粘贴时请多加注意:-)
我从django外部复制了一个表,默认将Meta类设置为“ 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'
Run Code Online (Sandbox Code Playgroud)
通过将manged更改为True,makemigrations开始接受更改。
当向 django api 应用程序添加新模型并运行该工具时python manage.py makemigrations,该工具未检测到任何新模型。
奇怪的是,旧模型确实被 选中makemigrations,但这是因为它们在urlpatterns链中被引用,并且该工具以某种方式检测到它们。所以要留意这种行为。
问题是因为models包对应的目录结构有子包,所有文件__init__.py都是空的。他们必须显式导入每个子文件夹和模型 中的所有必需类,__init__.py以便 Django 使用该工具选取它们makemigrations。
models\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py <--- empty\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 patient\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py <--- empty\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 breed.py\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 timeline\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py <-- empty\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 event.py\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\nRun Code Online (Sandbox Code Playgroud)\n
这可能会对其他人有所帮助,因为我最终花了几个小时试图追查这个问题。
如果模型中有一个同名的函数,这将删除该值。事后看来非常明显,但尽管如此。
所以,如果你有这样的事情:
class Foobar(models.Model):
[...]
something = models.BooleanField(default=False)
[...]
def something(self):
return [some logic]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该函数将覆盖上面的设置,使其对makemigrations.
| 归档时间: |
|
| 查看次数: |
69139 次 |
| 最近记录: |