Django 模型类(models.py)的定义详解


Posted in Python onJuly 19, 2019

一.

Django 模型类(models.py)的定义详解

#在models.py中添加
#代码如下
from django.db import models

#出版商
class Publisher(models.Model):
  name=models.CharField(max_length=30)
  address=models.CharField(max_length=50)
  city=models.CharField(max_length=60)
  state_province=models.CharField(max_length=30)
  country=models.CharField(max_length=50)
  website=models.URLField()
  
#作者
class Author(models.Model):
  name=models.CharField(max_length=30)
  
#作者详情
class AuthorDetail(models.Model):
  sex=models.BooleanField(max_length=1,choices=((0,'男'),(1,'女')))
  email=models.EmailField()
  address=models.CharField(max_length=50)
  birthday=models.DateField()
  author=models.OneToOneField(Author)
  
#书详情
class Book(models.Model):
  name=models.CharField(max_length=100)
  authors=models.ManyToManyField(Author)
  publisher=models.ForeignKey(Publisher)
  publication_date=models.DateField()

上面的代码中:

1. 每个数据模型都继承django.db.models.Model。他们的父类Model包含了所有必要的和数据库交互的方法,并提供了一个简介漂亮的数据库定义语法。

2.每个模型相当于单个的数据库表(这种情况例外的是多对多的关系,多对多关系的时候会多生成一张关系表),每个属性也是这个表中的一个字段。属性名就是字段名,它的类型(例CharField)相当于数据库的字段类型(例如varchar)。

3.模型间的三种关系:一对一(OneToOneField) 一对多也就是外键(ForeignKey)

多对多(ManyToManyField)

4.模型的常用字段类型:

  • BooleanField:布尔类型字段
  • CharField:字符串类型字段
  • DateTimeField:日期字段
  • DecimalField:(精确)小数字段
  • EmailField:Email字段
  • FileField:文件字段(保存和处理上传的文件)
  • FloatField:(浮点数)小数字段
  • Imagefield:图片字段(保存和处理上传的图片)
  • IPAddressField:IP字段
  • IntegerField:整数字段
  • SmallIntegerField:小整数字段
  • TextField:文本字段
  • URLField:网页地址字段
  • ......

5.模型常用的字段选项:

  • null(null=True|False):数据库字段的设置是否可以为空(数据库进行验证)
  • blank(blank=True|False):字段是否为空django会进行校验(表单进行验证)
  • choices:轻量级的配置字段可选属性的定义
  • default:字段的默认选项
  • help_text:字符按文字帮助
  • primary_key(=True|False):一般不需要定义是否为主键,如果没有指明主键的话,django胡自动添加一个默认主键:id=models.AutoField(primary_key=True)
  • unique:是否唯一(对于数据表而言)
  • verbose_name:字段的详细名称,若不指定该属性,默认使用字段的属性名称

二.定义数据模型的扩展属性:

通过内部类Meta给数据模型类增加扩展属性:

class Meta:
  verbose_name='名称' #这里命名为中文名称,但显示时会在后面出现一个s
  verbose_name_plural='名称复数形式' #配合verbose使用去除s
  ordering=[排序字段]

1.

Django 模型类(models.py)的定义详解

Django 模型类(models.py)的定义详解

2.

Django 模型类(models.py)的定义详解

Django 模型类(models.py)的定义详解

三.定义模型方法:

定义模型方法和定义普通python类方法没有太大的差别,定义模型方法可以及那个当前对应的数据组装成具体的业务逻辑。

示例:定义__str__()方法让对象有个默认名字

注:python2中使用__unicode__(),python3中使用__str__()

Django 模型类(models.py)的定义详解

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python制作刷网页流量工具
Apr 23 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
python使用super()出现错误解决办法
Aug 14 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
python 重命名轴索引的方法
Nov 10 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
在Python中使用Neo4j的方法
Mar 14 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
python实现人像动漫化的示例代码
May 17 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 #Python
使用TensorFlow实现简单线性回归模型
Jul 19 #Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 #Python
简单了解django缓存方式及配置
Jul 19 #Python
python实现最小二乘法线性拟合
Jul 19 #Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 #Python
python如何实现数据的线性拟合
Jul 19 #Python
You might like
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
举例讲解Python中is和id的用法
2015/04/03 Python
Python中进程和线程的区别详解
2017/10/29 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
do you have any Best Practice for testing
2016/06/04 面试题
实习自荐信
2013/10/13 职场文书
学习自我鉴定
2014/02/01 职场文书
医药销售自我评价200字
2014/09/11 职场文书
党员十八大心得体会
2014/09/12 职场文书
办理收楼委托书范本
2014/10/09 职场文书
音乐课外活动总结
2015/05/09 职场文书
音乐之声观后感
2015/06/04 职场文书
工作年限证明模板
2015/06/15 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
Python数据处理的三个实用技巧分享
2022/04/01 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS