Django 2.0访问模型(创建/删除/过滤器)独立[没有manage.py shell]

Yon*_*ono 5 python django django-models python-3.x

我有一个Django项目,我想生成一些对象(来自模型)

我想要的是:独立的 Python 脚本来创建一堆对象和/或过滤,删除.

在导入模型from apps.base.models import MyModel 并使用之前的StackOverflow问题设置配置后,我无法运行脚本.

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")
import django

django.setup()
from apps.base.models import MyModel
Run Code Online (Sandbox Code Playgroud)

请注意,这是在Django 2.0.6版[Django 2.0+]上.

已使用正确的设置,( myProject.settings)

  • 正确配置其他所有内容后,我收到以下错误:

    • RuntimeError: Model class apps.base.models.MyModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

设置:

完整的GitHub链接在这里:https://github.com/teratzu/Razred-Management

Col*_*ole 1

我再次git clone对您的 Django 项目的存储库进行了操作并使其正常工作,而无需重新设计您的项目结构,方法如下:


1. 修改你的settings.BASE_DIR变量

通常,Django 项目的设置文件的文件路径是,projectname/settings.py但对于单独的设置,它是projectname/settings/<env_name>.py.

因此,BASE_DIR需要重新设计:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
Run Code Online (Sandbox Code Playgroud)

到:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
Run Code Online (Sandbox Code Playgroud)

考虑项目根目录和设置文件之间的额外目录。


2. 更改应用程序声明INSTALLED_APPS

您的应用程序的虚线位置BASE_DIRapps.base。将当前声明 替换baseapps.base


3.修复虚线路径:

如果虚线路径出现任何错误,请检查回溯,因为它将指出问题。例如,您的 currenturls.py可能会导致问题,因为有一条虚线路径,base.urls而它应该是显式的apps.base.urls. 例如:

urlpatterns = [
    url(r'', include('base.urls')),
    ...
]
Run Code Online (Sandbox Code Playgroud)

至以下内容:

urlpatterns = [
    url(r'', include('apps.base.urls')),
    ...
]
Run Code Online (Sandbox Code Playgroud)

4. 迁移模型

履行./manage.py makemigrations && ./manage.py migrate

另外,作为旁注,migrations目录不应该位于.gitignore. 阅读:我应该在 .gitignore 文件中添加 Django 迁移文件吗?



这样我就可以在 Django 项目的根目录下运行以下脚本,没有错误:

import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DzenanElvir.settings.base")
django.setup()
from apps.base.models import ModelRazred
Run Code Online (Sandbox Code Playgroud)