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对两个有序列表进行合并和排序的例子
Jun 13 Python
Python实现周期性抓取网页内容的方法
Nov 04 Python
django从请求到响应的过程深入讲解
Aug 01 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
Python发展史及网络爬虫
Jun 19 Python
Python Web版语音合成实例详解
Jul 16 Python
python使用Geany编辑器配置方法
Feb 21 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
Django使用rest_framework写出API
May 21 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
Python 如何实现访问者模式
Jul 28 Python
浅谈Python响应式类库RxPy
Jun 14 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+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
React diff算法的实现示例
2018/04/20 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
军校本科大学生自我评价
2014/01/14 职场文书
学校安全防火方案
2014/06/07 职场文书
法制宣传标语
2014/06/23 职场文书
七年级上册生物的课件
2019/08/07 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
django 认证类配置实现
2021/11/11 Python