Django迁移更改目录结构后未检测到更改

Posted

技术标签:

【中文标题】Django迁移更改目录结构后未检测到更改【英文标题】:Django migrations no changes detected after changing directory structure 【发布时间】:2020-01-13 06:03:00 【问题描述】:

我已经使用这个目录结构创建了一个 Django 项目:

bi3online
    __init__.py
    migrations
        __init__.py
    static
    templates
    media
    manage.py
    models.py
    urls.py
    views.py
    wsgi.py
    ...

当我运行 python manage.py makemigrationspython manage.py migrate 时,它只会为 auth 应用程序创建迁移,然后当我再次尝试时,它说没有检测到任何更改。迁移似乎只适用于应用,但我不确定。

models.py

from django.db import models


class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(null=False, blank=False, max_length=64)

【问题讨论】:

它检测模型,即任何models 模块/包中的任何INSTALLED_APPS 中的Model 子类。 你用过python manage.py startproject argstartapp arg吗? @iDrwish 我用startproject bi3online 创建了项目,但我没有创建任何应用程序。 你怎么会有models.py,这只能用startapp创建?我不确定migrate 没有它也能正常工作。你有理由避开startapp吗? 您需要使用应用程序。如果模型不在应用程序中,它们通常将无法工作。 【参考方案1】:

只是总结一下 cmets 并带您找到解决方案:

Django 与应用程序一起工作。该应用程序是一个包含models.pyapps.pyviews.py 模块(可选其他)的文件夹。

假设您的应用名为books。要让 Django 将该文件夹识别为应用程序,您需要将您的应用程序添加到 settings.py

INSTALLED_APPS = [
    ... ,
    'books'
]

您需要在books 文件夹中的apps.py 模块来拥有这个:

from django.apps import AppConfig


class BooksConfig(AppConfig):
     name = 'books'

你应该有以下项目结构:

bi3online
    books
        migrations
            __init__.py
        __init__.py
        models.py
        views.py
    bi3online
        __init__.py
        manage.py
        urls.py
        wsgi.py
    static
    templates
    media

【讨论】:

以上是关于Django迁移更改目录结构后未检测到更改的主要内容,如果未能解决你的问题,请参考以下文章

Django 迁移未检测到所有更改

Django 1.7 中的 Django-migrations 检测模型更改,但不会在迁移时应用它们

dedecms目录结构,非常全

如何将django部署从顶级目录迁移到子目录下(NGINX UWSGI DJANGO)

dedecms目录结构大全,非常完整

dedecms目录结构大全,非常完整