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 makemigrations
和 python 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 arg
和startapp arg
吗?
@iDrwish 我用startproject bi3online
创建了项目,但我没有创建任何应用程序。
你怎么会有models.py
,这只能用startapp
创建?我不确定migrate
没有它也能正常工作。你有理由避开startapp
吗?
您需要使用应用程序。如果模型不在应用程序中,它们通常将无法工作。
【参考方案1】:
只是总结一下 cmets 并带您找到解决方案:
Django 与应用程序一起工作。该应用程序是一个包含models.py
、apps.py
和views.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 1.7 中的 Django-migrations 检测模型更改,但不会在迁移时应用它们