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实现定时同步本机与北京时间的方法
Mar 24 Python
使用Python实现一个简单的项目监控
Mar 31 Python
Python程序中设置HTTP代理
Nov 06 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 Python
Python 2.7中文显示与处理方法
Jul 16 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
python带参数打包exe及调用方式
Dec 21 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 Python
详解Python牛顿插值法
May 11 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
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
python实现NB-IoT模块远程控制
2018/06/20 Python
Python最小二乘法矩阵
2019/01/02 Python
人工神经网络算法知识点总结
2019/06/11 Python
python程序变成软件的实操方法
2019/06/24 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
Python的形参和实参使用方式
2019/12/24 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
殡葬服务心得体会
2014/09/11 职场文书
档案管理员岗位职责
2015/02/12 职场文书
病危通知书样本
2015/04/17 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js