我有一个 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
请注意,这是在 Django 版本 2.0.6 [Django 2.0+] 上。
已使用正确的设置,(即 myProject.settings
)
正确配置所有其他内容后,出现以下错误:
RuntimeError:模型类 apps.base.models.MyModel 未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中。
设置:
base.py : https://pastebin.com/MNcitE4U
完整的 GitHub 链接在这里:https://github.com/teratzu/Razred-Management
最佳答案
我看到当前项目结构中的两个问题。
缺少 AppConfig
正如其他答案所建议的那样,您需要提供一个 AppConfig
子类来注册您的应用程序;见Configuring applications Django 文档中的部分。
但是,拥有一个用于命名空间声明的 apps
包是完全没问题的,尤其是当您计划拥有多个应用程序时;事实上,this is what Django does itself ,将所有电池应用程序捆绑在 django.contrib
命名空间下。在我的工作中,我们还使用通用命名空间来组织 Django 应用程序:mycompany.internal.someapp
、mycompany.customers.otherapp
等。
因此您不需要移动文件。只需正确引用 apps.base
:创建一个包含以下内容的文件 apps/base/apps.py
:
# apps/base/apps.py
from django.apps import AppConfig
class MyBaseAppConfig(AppConfig):
name = 'apps.base'
现在在设置中引用应用 apps.base
创建的配置类:
# DzenanElvir/settings/base.py
INSTALLED_APPS = [
...
# Local apps
'apps.base.apps.MyBaseAppConfig',
]
如果 apps
应该是一个包,把它当作一个包
因此,您声明了 apps
包(通过在 apps
目录中放置一个 __init__.py
文件)。但是,您从不使用该包,而是通过向其添加 apps
目录来摆弄 sys.path
。如果应用程序应该可以在 apps.base
下导入,请删除 DzenanElvir/settings.base.py
中的路径调整行:
# remove this line:
path.append(os.path.join(PROJECT_ROOT, "apps"))
并在整个应用程序中使用正确的导入,替换:
来自 .models
和来自 apps.base.models
来自 .forms
和来自 apps.base.forms
来自 .pregledView
和来自 apps.base.pregledView
来自 .postsView
和来自 apps.base.postsView
另外,别忘了替换
urlpatterns = [
url(r'', include('base.urls')),
...
]
与
urlpatterns = [
url(r'', include('apps.base.urls')),
...
]
在 DzenanElvir/urls.py
中,你应该可以开始了。
关于python - Django 2.0 访问模型(CREATE/REMOVE/FILTER)独立 [没有 manage.py shell],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51088835/