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 自动补全(vim)
Nov 30 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
django接入新浪微博OAuth的方法
Jun 29 Python
深入理解python函数递归和生成器
Jun 06 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
PyQt5实现简易电子词典
Jun 25 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
Aug 07 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 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集成开发环境详解
2019/09/24 PHP
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
python基础教程之类class定义使用方法
2014/02/20 Python
JSON Web Tokens的实现原理
2017/04/02 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
Python程序暂停的正常处理方法
2019/11/07 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
营销部内勤岗位职责
2014/04/30 职场文书
运动与健康自我评价
2015/03/09 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
八月一日观后感
2015/06/10 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
英镑符号 £
2022/02/17 杂记