我在django项目中向我的记者应用程序添加了一个简单的模型
class Municipalities(models.Model):
namelsad = models.CharField(max_length=100)
geom = gismodels.MultiPolygonField(srid=4326)
当我
python3 manage.py makemigrations reporter
上面写着
no changes detected in reporter
当我
python3 manage.py migrate reporter
Operations to perform:
Apply all migrations: reporter
Running migrations:
No migrations to apply.
但是没有postgresql报告城市数据库表
报告器包含在已安装的应用程序中
市政模型位于reporter app中的model.py文件中
我应该添加一个counties表,并在postgresql中手动删除它,并尝试添加市政模型来创建一个表
城市也属于django_content_类型
但是没有市政当局的表格
更新
已将
Class Municipalities
更改为Class Muni
python3 manage.py makemigrations reporter
然后它问我
Did you rename the reporter.Municipalities model to Muni? [y/N]
如果我单击y
然后运行migrate
给我
django.db.utils.ProgrammingError: table "reporter_municipalities" does not exist
但我很困惑,桌子永远不存在!!
因为“记者市”,我现在根本不能移民到DB
最佳答案
当Django查找迁移时,它会搜索在reporter
中配置的应用程序INSTALLED_APPS
。它使用AppConfig
或应用程序名来检索完整的包名,即my_project.reporter
。此软件包必须在PYTHONPATH
中提供。它应该只在您的开发项目中可用,但可能在您的virtualenv中“安装”了它。它可以运行pip install .
(不运行-e
)或(使用某些配置)运行测试(我在tox中见过这种情况)。
在这个场景中,python有两个my_project.reporter
可用,但是您编辑/更新了“第二个”。当您运行./manage.py makemigrations
时,python首先找到您没有更改的代码(virtualenv中已安装的代码),因此它找不到更新。
要检查是否有此副本,您可以:
卸载项目(pip uninstall <django-project>
)以查看它是否引用“符号链接”
如果是这样的话你会看到Uninstalling <PROJECT>:Would remove: /data/PROGETTI/UNICEF/odk/.venv/lib/python3.6/site-packages/<PROJECT>.egg-linkProceed (y/n)? y
注意行末的egg-link
。
或者
打开shell并键入import <full_path_of_reporter> AS pkg; print(pkg.__file__)
并检查文件路径