我有以下结构:
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()
型
2条答案
按热度按时间fhity93d1#
您应该在
settings.py
中注册应用程序字符串
另外,不要忘记将
peak_model.py
和waterfall_model.py
重命名为modes.py
或将它们组织在models
模块中。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.Peak
和API.Waterfall
将仅指定为Peak
或Waterfall
)tl;dr正如Maxim达尼洛夫所指示的,您需要将这些应用添加到
INSTALLED_APPS
中,确保您拥有包含这些模块的可导入models
模块,然后再次运行makemigrations
命令(可能需要显式指定应用名称)。