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

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

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

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


当前回答

操作方法:

1 .

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

零食 : 2

python manage.py makemigrations <appname>

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

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

方法2

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

django-admin startapp <appname>

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

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

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

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

其他回答

这很简单,你需要在空的migrations文件夹中添加空的init.py。 然后使用"python manage.py makemigrations"检查迁移

目录结构,

你的应用 迁移 init.py

可能的原因是删除了现有的db文件和migrations文件夹 你可以使用python manage.py makemigrations <app_name>这应该可以工作。我曾经遇到过类似的问题。

另一个会导致这种情况的是字段后面的尾随逗号,这将导致在makemigrationations期间跳过字段:

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创建模型迁移,因为Python认为它是一个元组,而Django不认为它是一个字段。

确保你的应用在settings.py中的installed_apps中被提及 确保建模类扩展了模型。模型

我从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'

通过将managed改为True, makemig开始发生变化。