我想用ModelViewSet来显示Users,但不知为什么Django似乎不喜欢在projecturls.py中导入UserViewSet。看起来是一个很愚蠢的错误,但我已经被这个问题卡住了一段时间,这很令人沮丧。据我所知,我的代码中没有任何错误,导入也完全正常。我是不是遗漏了什么?
Django 2.2.13版本
projecturls.py
from django_backend.user_profile.views import UserViewSet
router = routers.DefaultRouter()
router.register('user', UserViewSet)
urlpatterns = [
path('accounts/', include(router.urls)),
]
userprofileviews.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()#.order_by('-date_joined')
serializer_class = UserSerializer
错
from django_backend.user_profile.views import UserViewSet
ModuleNotFoundError: No module named 'django_backend'
项目结构
从评论中,我们发现你的问题的直接答案是这样的。你导入的是 django_backend
,它是你项目的根,但不是一个正式的 Python包 存在于 sys.path
因此不能以这种方式导入。
由于Django将 sys.path
到你的项目根目录,你需要导入 user_profile.views
橆 django_backend
部分。
from user_profile.views import UserViewSet
一旦你这样做了,你可以考虑配置PyCharm,让它知道 django_backend
文件夹是你的Sources Root。这将告诉PyCharm在哪里寻找Python代码,这样它就不会在尝试从你的Django目录导入模块时出现错误。
python解释器会在sys.path中列出的目录中搜索模块。你可以通过打印sys.path来检查是否有 "reactjs-comeon "被列出。
根据你运行文件的方式,它可能不在其中。例如,如果你运行project> python urls.py,它就不会被包含。你可以手动添加目录到sys.path中,作为一个快速的解决方案。
不过一般来说,我建议你阅读一下关于相对绝对导入和打包的文章,内容包括 https:/docs.python.org3referenceimport.html。