概述

如何让你定义的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. nodejs中的Buffer

    一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...

  2. JOISC2019 游记

    JOISC2019 游记 Day 1: 試験 (Examination) 题目大意: 有\(n(n\le10^5)\)个人,每个人有两种属性\(s_i,t_i\).\(q(q\le10^5)\)次询问 ...

  3. 通过游戏来学习CSS的Flex布局

    在复习Flex 布局的时候发现的了几个有趣的小游戏,在这里分享并记录几个有难度的答案 1. Flexbox Froggy 通过调整CSS样式来使各种青蛙回到对应的荷叶上,游戏默认难度为Beginner ...

  4. [git]checkout&branch

    git branch 和 git checkout经常在一起使用,所以在此将它们合在一起 1.Git branch 一般用于分支的操作,比如创建分支,查看分支等等, 1.1 git branch 不带 ...

  5. MyBatis(八)联合查询 级联属性封装结果集

    (1)接口中编写方法 public Emp getEmpandDept(); (2)编写Mapper文件 <resultMap type="com.eu.bean.Emp" ...

  6. 190327 Python登录接口

    #!Author:John # _*_ coding: utf-8 _*_ #编写登录接口 #输入用户名密码 #认证成功后显示欢迎信息 #输错三次后锁定 import sys, os, getpass ...

  7. Java 将容器List里面的内容保存到数组

    import java.util.List; import java.util.ArrayList; public class listToArr { public static void main( ...

  8. 关于vue的数据增删的一些细节

    第一种情况:在vue中使用的数据必须先在data中定义数据,不然报错: 第二种情况:访问对象中不存在的值,是可以得到undefined,但是不会报错 第三种:vue只会监听data已经定义的值,后续添 ...

  9. Unknown return value type [java.lang.Boolean]] with root cause

    添加@responsebody 为什么呢 ? 因为在进行ajax传输的时候  我已指定传输的类型为 json数据类型 要是不加的话 它只是Boolean类型 而不是json类型

  10. Pinpoint在Win7下搭建

    Pinpoint在Win7下搭建 注:原创作品,未经允许严禁转载 对于Pinpoint是什么这个问题,在此不做任何讨论,因此本篇文章适用人群为了解Pinpoint相关基础理论知识,需要进行Window ...