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 相关文章推荐
pycharm安装图文教程
May 02 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
Python的条件表达式和lambda表达式实例
Jan 31 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
May 30 Python
python实现爬取百度图片的方法示例
Jul 06 Python
python实现while循环打印星星的四种形状
Nov 23 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
Python创建简单的神经网络实例讲解
Jan 04 Python
python实现网络五子棋
Apr 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
一个简单的域名注册情况查询程序
2006/10/09 PHP
php adodb连接不同数据库
2009/03/19 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
js身份证验证超强脚本
2008/10/26 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
Python标准库之collections包的使用教程
2017/04/27 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
给酒店员工的表扬信
2014/01/11 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
采购经理岗位职责
2014/02/16 职场文书
校庆接待方案
2014/03/18 职场文书
实习护士自荐信
2014/06/21 职场文书
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL
vue中div禁止点击事件的实现
2022/04/02 Vue.js