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

通常我使用startapp命令创建新的应用程序,但在创建这个应用程序时没有使用它。

调试后,我发现它没有创建迁移,因为迁移包/文件夹从应用程序中丢失。

如果文件夹不存在或者我遗漏了什么,如果它创建文件夹会更好吗?


当前回答

首先,确保你的应用已经在setting.py中的Installed_app中注册了 那么上面的答案就完全正确了

其他回答

还有一个非常愚蠢的问题是在模型中定义两个类Meta。在这种情况下,在运行makemigrations时,对第一个的任何更改都不会应用。

class Product(models.Model):
    somefield = models.CharField(max_length=255)
    someotherfield = models.CharField(max_length=255)

    class Meta:
        indexes = [models.Index(fields=["somefield"], name="somefield_idx")]

    def somefunc(self):
        pass

    # Many lines...

    class Meta:
        indexes = [models.Index(fields=["someotherfield"], name="someotherfield_idx")]

这是一个评论,但可能应该是一个答案。

确保你的应用程序名称在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

这可以通过下面提到的两个步骤来完成。

将你的应用添加到settings.py > INSTALLED_APPS 打开admin.py


from .models import upImg
# Register your models here.
admin.site.register(upImg)

注意:将upImg替换为models.py中定义的className

在此之后,查看是否仍然有python manage.py makemigrations。如果有,也执行python manage.py migrate。

更多信息请参考django教程。

我的问题比上面的答案要简单得多,可能是一个更常见的原因,只要你的项目已经设置好并正在工作。在我的一个已经工作了很长时间的应用程序中,迁移似乎不稳定,所以我匆忙地做了以下工作:

rm -r */migrations/*
rm db.sqlite3
python3 manage.py makemigrations
No changes detected

Whaat ? ?

我还错误地删除了所有__init__.py文件:(-在我进入后,一切都重新工作了:

touch ads1/migrations/__init__.py

对于我的每一份申请,makemigrationations都再次起作用。

原来我通过复制另一个应用程序手动创建了一个新的应用程序,并且忘记将__init__.py放在migrations文件夹中,这限制了我,使一切都不稳定-导致我使用上面描述的rm -r使情况更糟。

希望这能帮助一些人在“未检测到更改”的错误中咒骂几个小时。

操作方法:

1 .

确保你的应用必须包含在settings.py中的INSTALLED_APPS中

零食 : 2

python manage.py makemigrations <appname>

如果相同的消息显示(未检测到更改)

这对你的项目来说是非常危险的,所以在应用这个方法之前,请确保你的项目有备份。

方法2

重命名您的应用程序名称,并使用:

django-admin startapp <appname>

复制除旧应用程序之外的所有.py文件

迁移文件夹 pycache文件夹 init.py Test.py文件,如果您没有在其中编写代码

并粘贴到你最近制作的新应用程序中

记住,你必须为新应用程序创建完全相同的名称,否则你必须在项目中进行更多更改。