概述

如何让你定义的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. 解释器、环境变量、如何运行python程序、变量先定义后引用

    python解释器的介绍.解释器的安装.环境变量的添加为什么加环境变量.如何调取不同的解释器版本实现多版本共存.python程序如何运行的.python的变量定义 一.python解释器: 用来翻译语 ...

  2. JAVA基础复习与总结<五> String类_File类_Date类

    String类 .Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicoe字符组成. .Java没有内置的字符串类型,而是在标准java类库中提供了一个预定义的类String, ...

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

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

  4. Akka.net 性能测试兼使用小技巧

    最近想研究一下分布式开发,先拿了akka.net 跑一下性能 参考自己写个网络实现,一般在本机通讯,300M每秒的传输率,作为参考 嗯,先说结果,用Akka.net直接发bytearray,最后也只有 ...

  5. Spring Cloud微服务笔记(五)Feign

    Feign 一.Feign概述 Feign是一个声明式的Web Service客户端.在Spring Cloud 中使用Feign,可以做到 使用HTTP请求访问远程服务,就像调用本地方法一样,同时它 ...

  6. [ubuntu]apt-get update突然出现arm package找不到

    https://blog.csdn.net/l741299292/article/details/69671789

  7. BZOJ 3622

    直接算 $a_i>b_i$ 对数恰为 $k$ 的不好算 那么可以先算 $a_i>b_i$ 对数至少 $k$ 的 这个排序后随便dp一下就好 那么再除了一下 用 $f_i$ 表示 $a_i& ...

  8. centos7安装tomcat8.5

    1.下载 tomcat Linux 版本 tomcat 官网下载地址:http://tomcat.apache.org/download-80.cgi 百度云盘链接:链接: https://pan.b ...

  9. 181102 Windows下安装kivy(用python写APP)

    了解到Instgram,知乎等APP是用python写的.我也决定学习用python写APP.这里我们需要安装kivy. 环境:win7,python3.6 安装方式:DOS命令窗口 注意事项:目前不 ...

  10. ionic基于GPS定位并通过百度地图获取定位详细信息

    相信所有的前端攻城狮都会碰到移动端App.里面获取用户定位信息. 那么问题来了,怎么获取用户的定位信息(经纬度)呢. 当然方法有很多,通过百度地图API 以及 高德地图 API都是可以的.但是两个获取 ...