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 相关文章推荐
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
使用k8s部署Django项目的方法步骤
Jan 14 Python
将python包发布到PyPI和制作whl文件方式
Dec 25 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 Python
使用Python实现NBA球员数据查询小程序功能
Nov 09 Python
python爬取招聘要求等信息实例
Nov 20 Python
Django 用户认证Auth组件的使用
Nov 30 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 中dirname(_file_)讲解
2007/03/18 PHP
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
python解决字典中的值是列表问题的方法
2013/03/04 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
行政专员岗位职责
2014/01/02 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
基于Python实现对比Exce的工具
2022/04/07 Python