概述

如何让你定义的model不在models.py中

在app的models目录中的models

你新建一个app后这个models.py就会自动建立,里面只有几行代码。那么如果是一个中大型项目,每个app里面可能需要建立很多表(一个表就对应models.py里面定义的一个class),那把这些类都写在一个.py文件中显然不是一个好主意,主要是不利于维护,那么我们是否可以把那些对应表的类写在单独文件中,并且这些单独文件统一在一个目录中呢?当然可以,如下图:

这种结构看起来清晰明了但是如何使用呢?

我们实际上是在report这个app里建立了一个名为models的Python Package(而且名称必须是models)这时候它会自动建立一个__init__.py文件,这个文件通常情况下是空的,但是在当前情况下你就需要格外注意需要在这个文件中添加一些东西,如下图:

如上图所示也就导入在models包里面的模块以及模块里面的类,目的是对app可见,而且你models里有多少个模块,这里就要导入多少。通过上面这种结构你就可以把model放在app默认的models.py外面。下图是settings.py文件

但是要使用这种单独models目录的结构需要注意一下几点:

  • 新建的Python Package名称必须叫做models,因为默认会检查models.py文件(通过<app>.models),所以需要一个名称相同的目录,而目录中的__init__.py则完成后续的导入工作。所以如果你用一个其他名字则不能使用这种结构。
  • 在settings.py的INSTALLED_APPS中声明你建立的app
  • 虽然在单独的目录中但是你定义的model也依然可以被访问,就像它们被定义在models.py文件中一样。访问路径依然是app.models

使用自定义名称

如果我不想使用models这一的目录而是想自己起一个更好听的名字可以吗?当然可以。

在自定义models目录场景中,就需要使用默认的models.py文件,目的是在这里导入哪些你自己定义的目录以及模块还有模块里面的类,除了这一点其他设置和上面第一种场景一致。另外自定义名称的models目录(上图中ConsuomModels)里面的__init__.py保留为空即可。

参考文章 Django models outside of models.py

不在models.py中的models的更多相关文章

  1. Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据

    基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...

  2. 超越村后端开发(2:新建models.py+xadmin的引入)

    1.新建Model 1.users数据 1.在apps/users/models.py中: from datetime import datetime from django.db import mo ...

  3. Django - models.py 应用

    Django - models.py 应用 编写 models.py 文件 from django.db import models # Create your models here. class ...

  4. 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  5. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  6. Django模型层(models.py)之模型创建

    Django数据库操作是十分重要的内容,这两天简单学习了数据库的操作,这里做个总结. 1.ORM简介 简单的来说,ORM就是对象-关系-映射.它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖 ...

  7. django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)

    models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True),  OneToOneField("Author" ...

  8. django models.py增加后MySQL数据库中并没有生成相应的表

    根据教程到添加并保存quest的时候报错了 1.models.py里面的命名没有错 2.查看mysite->settiongs下的INSTALLED_APPS设置正确 3.使用python ma ...

  9. django搭建web (四) models.py

    demo 该demo模型主要是用于问题,选择单个或多个答案的问卷形式应用 # -*- coding: utf-8 -*- from __future__ import unicode_literals ...

随机推荐

  1. VScode加文件头的方式

    在VScode中添加文件头,设置文件编辑者的方式,在软件中查询到file-header插件: 安装好,此时通过是可以生成默认的文件头.如果需要修改配置,在文件=>首选项=>设置中修改: 查 ...

  2. Git 如何解决部署远程仓库出现 fatal: refusing to merge unrelated histories 问题

    想把本地仓库的文件搬到Github,先将远程仓库和本地仓库关联起来: 先到Github上复制远程仓库的SSH地址: 运行 git remote add origin 你复制的地址 理论上—如果在创建 ...

  3. 动态规划——Maximum Sum of 3 Non-Overlapping Subarrays

    这个题对我来说真的是相当难的题目了,严格来讲可能不算是个动态规划的题目,但这个题目对类似的划分多个非重叠连续子区间的问题提供了一个很好解决方案 这个题目需要找三个非重叠的连续子区间,通过维护两个数组将 ...

  4. springboot添加邮件发送及压缩功能

    springboot添加邮件发送及文件压缩功能 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190233.html 先来一段诗 ``` 就这样吧 忍受折磨 ...

  5. css中文字体解决方案

    html { font-family: -apple-system, "Noto Sans", "Helvetica Neue", Helvetica, &qu ...

  6. Ubuntu上安装使用WeChat、TIM

    WeChat可以直接到软件商店安装,不过是网页版...(其实个人感觉还行,就是什么都不能设置就挺蛋疼的,字体大小.背景什么的) 以下是网上找到的教程,在此总结一下: 下载地址:https://gith ...

  7. window server 2008 安装Oracle10g

    oracle安装都大同小异. 开始安装步骤 输入完之后点击下一步 这时候稍等一会儿. 这时候也要稍等一会儿. 直接安装. 设置口令管理,设置SCOTT的密码为tiger就好了. 这时候稍等一会儿. o ...

  8. 使用abcpdf分页设置的问题

    如果需要在分页时不对模块进行截断,请为相应模块添加打印样式“page-break-inside: avoid” 如果需要在指定位置进行强制分页,请添加:“<div style="pag ...

  9. Ubuntu 16.04下安装搜狗输入法

    在确保更新了国内镜像源的前提下: 安装sogou输入法步骤 一.安装fcitx键盘输入法系统(系统已安装的可忽略此步骤) 1.添加以下源 sudo add-apt-repository ppa:fci ...

  10. 使用 TRESTClient 與 TRESTRequest 作為 HTTP Client 之二 (POST 檔案)

    使用 HTML 进行文件上传,已经是很平常的应用了,在手机App里面,也常常会用到这个作业,例如拍照上传,或是从相簿选取照片上传,都是很常见的. 在 HTML 的 Form 里面,要让使用者选择文件上 ...