Django makemigration无法检测我的模型

hgqdbh6s  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(147)

我有以下结构:

DjangoProjectRoot
    API
      Peak
         peak_model.py
      Waterfall
         waterfall_model.py
    models.py
      ...

字符串
正如您可以看到的,我将代码组织为每个模型都有单独的模块,包含模型本身以及相关的序列化程序和视图。
当我删除我的数据库模式时,所有的迁移都“makemigrations”,其他的表都被创建了,除了瀑布表。

api/migrations/0001_initial.py
    - Create model Book
    - Create model Department
    - Create model Natural
    - Create model Publisher
    - Create model Region
    - Create model Cave
    - Create model Glacier
    - Create model Lake
    - Create model Peak
    - Create model Saddle
    - Create model Shelter
    - Create model Municipality
    - Create model Guide
    - Add field region to department
    - Create model Collection
    - Create model Author


知道为什么吗
我只是重构了我的代码,在所有东西都进入模型字段之前。我也有点惊讶“-添加字段区域到部门”。我的数据库是空的,我清理了迁移。也许我应该在 * init.py * 文件中添加一些东西?似乎django需要检测我的新结构?
waterfall_model.py:

from django.db import models
from api.natural.natural_model import Natural
class Waterfall(Natural):
    height = models.IntegerField()

fhity93d

fhity93d1#

您应该在settings.py中注册应用程序

INSTALLED_APPS = [
    ...
    'API.Peak',
    'API.Waterfall'
    ...
]

字符串
另外,不要忘记将peak_model.pywaterfall_model.py重命名为modes.py或将它们组织在models模块中。

bwitn5fc

bwitn5fc2#

在进行迁移时,Django会遍历INSTALLED_APPS中列出的所有应用程序,查看现有迁移以构建迁移状态,然后将其与应用程序models模块中可用模型的当前状态进行比较。
为了让它们被识别出来,你需要将它们都放在models.py中,或者,如果你使用一个包(models/目录中有多个文件),你需要将它们都导入到models/__init__.py文件中。
当应用程序的目录中已经存在migrations/包时,makemigrations将只拾取模型并生成新的迁移。但是,如果你没有migrations包,Django不会自动拾取它,你必须显式指定应用程序的名称。
例如,如果您安装了API.Peak应用程序,但没有API/Peak/migrations/文件夹,则必须明确提供该文件夹,即:python manage.py makemigrations Peak(注意,当应用程序中有点时,您只需指定最后一部分,因此API.PeakAPI.Waterfall将仅指定为PeakWaterfall

tl;dr正如Maxim达尼洛夫所指示的,您需要将这些应用添加到INSTALLED_APPS中,确保您拥有包含这些模块的可导入models模块,然后再次运行makemigrations命令(可能需要显式指定应用名称)。

相关问题