【发布时间】:2022-10-23 18:42:00
【问题描述】:
你好,
出于教育目的,我正在构建一个具有多种模型和关系的 django 应用程序。
根据官方教程和我在网上找到的许多实现,数据库模型和序列化器以及视图都定义在单个文件中:“models.py”、“serializers.py”和“views.py”。
因此,项目目录如下所示:
> my_app
> migrations
> __init__.py
> admin.py
> models.py
> apps.py
> serializers.py
> tests.py
> urls.py
> views.py
根据应用程序中包含的模型数量,这些文件可能会增长到数百甚至数千行代码。
因此,开发和维护应用程序变得极具挑战性。
我想拆分这些文件,以便每个模型(以及相应的序列化程序和视图)都将在单独的每个模型文件中定义。
如下:
> my_app
> migrations
> models
> __init__.py
> model1.py
> model2.py
> model3.py
> model4.py
> serializers
> __init__.py
> model1_serializers.py
> model2_serializers.py
> model3_serializers.py
> model4_serializers.py
> views
> __init__.py
> model1_views.py
> model2_views.py
> model3_views.py
> model4_views.py
> __init__.py
> admin.py
> apps.py
> tests.py
> urls.py
我在拆分这些文件时遇到了一些困难,尚未找到最佳解决方案。
问题
为了定义一个序列化器 -> 应该导入相应的模型。
为了定义一个视图-> 应该导入相应的模型和序列化程序。
从与父目录位于同一级别的模型/文件中导入对象存在一些困难。 例如:将模型导入 serializers/model1_serializers.py 会导致错误
from models.model1 import Model1 # error: Unresolved reference 'models'
from my_app.models.model1 import Model1 # error: Unresolved reference 'my_app'我试过的
- 在 pycharm 中将项目目录标记为源 - 在将“my_app”文件夹标记为源之后,以下导入工作。但是在pycharm(例如cmd)之外运行代码会导致导入错误。
from models.model1 import Model1
- 将项目目录添加到 sys.path - sys.path 包含解释器将在其中搜索所需模块的目录列表。因此添加以下行应该可以导入(在文件 my_app/views/model1_views.py 中),但它不起作用,pycharm 仍然将导入行标记为错误。你知道我的错误在哪里吗?
import os from sys import path path.append(os.path.dirname(os.path.dirname(__file__))) from my_app.models.model1 import Model1如果您能解释我的错误并提出拆分这些文件的解决方案,我将不胜感激,谢谢!
【问题讨论】:
-
你试过了吗:
from ..models.model1 import Model1
标签: python django web django-rest-framework python-import