【发布时间】:2019-11-26 21:17:34
【问题描述】:
我正在尝试从同级包中导入模型并得到
ValueError: attempted relative import beyond top-level package
奇怪的是,我是根据 PyCharm 的建议自动填充的,所以 IDE 正在注册模块,但我的构建失败了......
]1
这是我的项目结构:
app
\
+-core
| \
| +- __init__.py
| +- models.py <- the Tag model is present here
|
+-scheduler
| \
| +- __init__.py
| +- serializers.py <- importing app.core.models.Tag in this file
|
+- __init__.py
app.scheduler.serializers.py:
from rest_framework import serializers
from ..core.models import Tag
class TagSerializer(serializers.ModelSerializer):
"""Serializer for tag objects"""
class Meta:
model = Tag
fields = ('id', 'name')
read_only_fields = ('id',)
我一直在摸索这个问题,似乎无法弄清楚......
我尝试过使用绝对路径,甚至使用 PyCharm 导入实用程序添加它:
from rest_framework import serializers
from app.core.models import Tag
class TagSerializer(serializers.ModelSerializer):
"""Serializer for tag objects"""
class Meta:
model = Tag
fields = ('id', 'name')
read_only_fields = ('id',)
但后来我得到:
ModuleNotFoundError: No module named 'app.core'
我正在使用
python manage.py runserver
【问题讨论】:
-
您是否使用
python app/manage.py runserver来运行您的服务器?还是您从 python shell 中得到这些错误? -
python manage.py runserver还有docker-compose up都给我同样的错误 -
你试过
from core.models import Tag吗?这就是我通常导入 Django 应用程序模型的方式。我也只是在阅读this SO Q/A 关于最初的ValueError可能会提供更多见解。 -
.....是的,这成功了。我现在很困惑。我所做的所有导入都在 PyCharm 中注册为不正确,这对我来说很有意义,但它们实际上是正确的......我的大脑已经坏了。
-
回想起来,我已经更新了我的答案。关于 pycharm,我认为如果您转到设置 >
Project: project_name>Project Structure,并将“源文件夹”更改为顶级app文件夹而不是(我在这里假设)项目文件夹,它应该提供正确的进口。
标签: python django-rest-framework python-import python-packaging django-2.2