概述

如何让你定义的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. tensorflow 使用 2 Felch ,Feed

    Felch ::在会话里可以执行多个 op , import tensorflow as tf input1 = tf.constant(3.0) input2 = tf.constant(2.0) ...

  2. [C++一本通-图论算法] 例4-4 最小花费

    题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元. 输入输 ...

  3. C++ otlv4 连接 sql server 数据库小记

    otlv4介绍: http://otl.sourceforge.net/ 测试代码 // testotlv4.cpp : 定义控制台应用程序的入口点. // #include "stdafx ...

  4. 机器学习——KNN算法(k近邻算法)

    一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...

  5. linux系统资源监控

    top命令 1.平均负载(load average): 正在耗费CPU进程与正在等待io的进程之和,三个值分别是一分钟,五分钟,十五分钟的平均负载,负载值只要小于CPU颗粒数属于正常情况 任务进程(T ...

  6. 【转】 微软在.NET官网上线.NET 架构指南

    原文地址:http://www.cnblogs.com/shanyou/p/6676357.html. 微软在Visual Studio 2017 正式发布的时候也上线了一个参考应用https://g ...

  7. 批量删除Excel里面的换行符

    关于批量删除excel里面的换行符,应该说写程序的遇上excel大体都会有这么个问题,在解决这个问题前,我的解决办法是把excel 的数据全部复制到txt里面, 因为操作txt比操作excel更为简单 ...

  8. hadoop环境搭建及Wordcount案例实验

    1.Linux环境变量设置 在/etc/profile中添加环境变量 sudo vim /etc/profile PATH=$PATH:/usr/local/hadoop/bin source /et ...

  9. docker 数据卷管理

    在生产环境中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这涉及到容器对数据管理的操作 容器对数据的管理主要有两种方式: 数据卷(Data Volumes): 容器内 ...

  10. Js 运行机制和Event Loop

    一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...