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 05 Python
python实现封装得到virustotal扫描结果
Oct 05 Python
浅谈Python处理PDF的方法
Nov 10 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
django组合搜索实现过程详解(附代码)
Aug 06 Python
Python数据持久化存储实现方法分析
Dec 21 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
如何真正的了解python装饰器
Aug 14 Python
python GUI计算器的实现
Oct 09 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
php自定义时间转换函数示例
2016/12/07 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
详解JS面向对象编程
2016/01/24 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
python各类经纬度转换的实例代码
2019/08/08 Python
安全资金保障制度
2014/01/23 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
2014政务公开实施方案
2014/02/19 职场文书
大型演出策划方案
2014/05/28 职场文书
三方协议书
2015/01/27 职场文书
Javascript之datagrid查询详解
2021/09/15 Javascript