django定义模型类-14
django的模型类定义在应用下的 models.py 文件中。
模型类继承自 django.db.models 包下的 Model 类。
新创建应用 book ,我们将在此应用下做演示。
python manage.py startapp book
1. 定义
以 ‘图书-角色’为例创建模型类
from django.db import models
class Book(models.Model):
b_title = models.CharField(max_length=20, verbose_name="标题")
b_pub_date = models.DateField(verbose_name="发布日期")
b_read = models.IntegerField(default=0, verbose_name="阅读数")
b_comment = models.IntegerField(default=0, verbose_name="评论数")
is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")
class Meta:
db_table = "book"
verbose_name = "书籍"
verbose_name_plural = verbose_name
def __str__(self):
return self.b_title
class Role(models.Model):
GENDER_CHOICES = (
(0, 'female'),
(1, 'male')
)
r_name = models.CharField(max_length=20, verbose_name="角色名称")
r_gender = models.SmallIntegerField(choices=GENDER_CHOICES, verbose_name="性别", default=0)
r_describe = models.CharField(max_length=200, verbose_name="描述信息", null=True)
r_book = models.ForeignKey(Book, on_delete=models.CASCADE, verbose_name="书籍")
is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")
class Meta:
db_table = "role"
verbose_name = "角色"
verbose_name_plural = verbose_name
def __str__(self):
return self.r_name
db_table指定数据表名字,如果未指明,将会以小写应用名+模型类名为数据表名字。verbose_name指定在admin站点中显示的名字如果没设置主键,django会自动生成一个自动增长的主键列。如果设置了主键,django不会再自动生成。
属性命名限制
- 不能是python的保留关键字。
- 不允许使用连续的下划线,这是由django的查询方式决定的。
- 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
字段名 = models.类型名(约束)
定义模型类基本格式如下:
from django.db import models
class 类名(models.Model):
字段名 = models.类型名(约束)
class Meta:
db_table = "表名"
verbose_name = admin中显示名字
verbose_name_plural = admin中显示名字复数
字段类型
django-ORM的基本字段类型
1、models.AutoField 自增列
如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField 字符串字段
必须 max_length 参数
3、models.BooleanField 布尔类型
不能为空,Blank=True
4、models.ComaSeparatedIntegerField 用逗号分割的数字=varchar
继承CharField,所以必须 max_lenght 参数
5、models.DateField 日期类型 date
对于参数,auto_now = True 则每次更新都会更新这个时间;
auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField 日期类型 datetime
同DateField的参数
7、models.Decimal 十进制小数类型 = decimal
必须指定整数位max_digits和小数位decimal_places
8、models.EmailField 字符串类型(邮箱格式)
对字符串进行正则表达式验证
9、models.FloatField 浮点类型 = double
10、models.IntegerField 整形
11、 整形范围
integer_field_ranges = {
'SmallIntegerField': (-32768, 32767),
'IntegerField': (-2147483648, 2147483647),
'BigIntegerField': (-9223372036854775808, 9223372036854775807),
'PositiveSmallIntegerField': (0, 32767),
'PositiveIntegerField': (0, 2147483647),
}
12、models.IPAddressField 字符串类型(ip4格式)
13、models.GenericIPAddressField 字符串类型(ip4或ip6格式)
参数protocol可以是:both、ipv4、ipv6
验证时,会根据设置报错
14、models.NullBooleanField 允许为空的布尔类型
15、models.PositiveIntegerFiel 正Integer
16、models.PositiveSmallIntegerField 正smallInteger
17、models.SlugField 减号、下划线、字母、数字
18、models.SmallIntegerField 数字
数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField 字符串=longtext
20、models.TimeField 时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField 字符串,地址正则表达式
22、models.BinaryField 二进制
23、models.ImageField 图片 在数据库中保存的是文件的路径
24、models.FilePathField 文件
约束类型
1、null=True
数据库中字段是否可以为空
2、blank=True
django的 Admin 中添加数据时是否可允许空值
3、primary_key = False
主键,对AutoField设置主键后,就会代替原来的自增 id 列
4、auto_now 和 auto_now_add
auto_now 自动创建---无论添加或修改,都是当前操作的时间
auto_now_add 自动创建---永远是创建时的时间
5、choices 枚举
GENDER_CHOICES = (
(0, 'male'),
(1, 'female')
)
r_gender = models.SmallIntegerField(choices=GENDER_CHOICES)
6、max_length 最大长度
7、default 默认值
8、verbose_name Admin中字段的显示名称
9、name|db_column 数据库中的字段名称
10、unique=True 不允许重复
11、db_index = True 数据库索
引
12、editable=True 在Admin里是否可编辑
13、error_messages=None 错误提示
14、auto_created=False 自动创建
15、help_text 在Admin中提示帮助信息
16、validators=[]
17、upload-to 上传路径
django定义模型类-14的更多相关文章
- django定义模型类
模型类被定义在应用文件夹下的model.py中 模型类必须继承Django的models.Model类 属性名不能用连续的两条下划线__ 主键:primary key,简写 pk 不需要主动定义,dj ...
- Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库
一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...
- django的模型类管理器-----------数据库操作的封装
模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...
- django 通过模型类操作数据表(基础增删改查)
进入项目shell的命令: python manage.py shell 以下为在相互shell终端中演示的例子: 首先导入模型类:(from 应用名.models import 类名) from b ...
- django之模型类在视图中的应用
一:模型类直接从把前端表单传入的值,进行存储. @csrf_exempt def regist(request): if request.method == 'POST': form = UserFo ...
- 7.Django模型类的定义和管理
Django的模型类是给ORM层服务的 1.每个数据模型都是django.db.models.Model的子类. 2.它的父类Model包含了所有必要的和数据库交互的方法,并提供了定义数据库字段的语法 ...
- Django商城项目笔记No.3用户部分-用户模型类
Django商城项目笔记No.3用户部分-用户模型类 Django提供了认证系统,文档资料https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/index ...
- Django笔记--模型
ORM是"对象-关系-映射"的简称,在Django当中,ORM就是模型类的管理器对象.操作顺序是先定义模型类,再定义模型类管理器,然后在模型类中实例化一个模型类管理器的对象,作为模 ...
- Django:模型model和数据库mysql(一)
以一个栗子尝试来记录: 两个表存储在数据库中,BookInfo表示书,HeroInfo表示人物.一本书中有多个人物 在MySQL中新建一个数据库Django1,不用创建表,用Django模型来配置数据 ...
随机推荐
- 【转】深入理解 Session 与 Cookie
Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简单又复 ...
- Exchange Server 2007 多名称证书配置
Exchange Server 2007上配置多名称证书,有两种方式,一种是通过Exchange Management Shell利用命令行工具进行创建:另一种是通过证书管理器控制台进行创建.本文将介 ...
- Chapter 4 Left Outer Join in MapReduce
4.1 Introdution Consider a company such as Amazon, which has over 200 millions of users and possibly ...
- javascript对象和函数的几种常见写法
/** * Created by chet on 15/12/17. */ var En= function (button,func) { //dosth,不能return alert(button ...
- P2564 [SCOI2009]生日礼物
题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...
- MVC渲染文章内容的html标签转义
文章详情页一般从数据库中取出文章内容,文章内容一般含有 等html标签,MVC中如果直接从模型输出文章内容,会把html标签转义变成<>等,这时候是要把转义后的标签变成html标签, ...
- PHP-----TP框架----命名空间
TP框架----命名空间 命名空间,起什么作用??? [1]命名空间是一个虚拟的目录,这个文件有可能存在这个电脑里的任何一个地方,但是如果要把这个文件它的命名空间全部写成同一个那么这些文件就相当于在同 ...
- Kali-linux破解LM Hashes密码
LM(LAN Manager)Hash是Windows操作系统最早使用的密码哈希算法之一.在Windows 2000.XP.Vista和Windows 7中使用了更先进的NTLMv2之前,这是唯一可用 ...
- list详解
#include <iostream> #include <vector> #include <list> std::list<std::string> ...
- [转]MVP+WCF+三层结构搭建项目框架
最近,我一直在重构之前做的一个项目,在这个过程中感慨万千.原先的项目是一个运用了WCF的C/S系统,在客户端运用了MVC模式,但MVC的View.Model耦合以及WCF端分布式欠佳等问题让我有了重构 ...