【问题标题】:How to split django 'models.py', 'views.py', 'serializers.py' files into multiple files如何将 django \'models.py\'、\'views.py\'、\'serializers.py\' 文件拆分为多个文件
【发布时间】: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'

我试过的

  1. 在 pycharm 中将项目目录标记为源 - 在将“my_app”文件夹标记为源之后,以下导入工作。但是在pycharm(例如cmd)之外运行代码会导致导入错误。
    from models.model1 import Model1
    
    1. 将项目目录添加到 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


【解决方案1】:

不知道是否建议为每个模型创建一个新的视图和序列化程序文件,随着应用程序的增长,它有点让事情变得混乱。

如果只是模型,您可以执行Django docs 中提到的操作

您可以在其中删除 models.py 文件,而是创建一个模型目录并在其中保存不同的模型文件:myapp/models/myapp/models/first_model.py 等。

但是,如果您基本上想分离关注点,您可以为每个功能/关注点创建一个新的 Django 应用程序,如下所示:

> my_app_one
    > migrations
    > __init__.py
    > admin.py
    > models.py
    > apps.py
    > serializers.py
    > tests.py
    > urls.py
    > views.py
> my_app_two
    > migrations
    > __init__.py
    > admin.py
    > models.py
    > apps.py
    > serializers.py
    > tests.py
    > urls.py
    > views.py

这应该可以解决您的导入问题。

【讨论】:

    【解决方案2】:

    序列化程序和视图文件不是制作多个模型,而是制作多个应用程序!

    这种方式更有条理,您还可以将应用程序链接在一起并从其他应用程序导入您喜欢的任何内容!

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多