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的更多相关文章

  1. django定义模型类

    模型类被定义在应用文件夹下的model.py中 模型类必须继承Django的models.Model类 属性名不能用连续的两条下划线__ 主键:primary key,简写 pk 不需要主动定义,dj ...

  2. Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库

    一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...

  3. django的模型类管理器-----------数据库操作的封装

    模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...

  4. django 通过模型类操作数据表(基础增删改查)

    进入项目shell的命令: python manage.py shell 以下为在相互shell终端中演示的例子: 首先导入模型类:(from 应用名.models import 类名) from b ...

  5. django之模型类在视图中的应用

    一:模型类直接从把前端表单传入的值,进行存储. @csrf_exempt def regist(request): if request.method == 'POST': form = UserFo ...

  6. 7.Django模型类的定义和管理

    Django的模型类是给ORM层服务的 1.每个数据模型都是django.db.models.Model的子类. 2.它的父类Model包含了所有必要的和数据库交互的方法,并提供了定义数据库字段的语法 ...

  7. Django商城项目笔记No.3用户部分-用户模型类

    Django商城项目笔记No.3用户部分-用户模型类 Django提供了认证系统,文档资料https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/index ...

  8. Django笔记--模型

    ORM是"对象-关系-映射"的简称,在Django当中,ORM就是模型类的管理器对象.操作顺序是先定义模型类,再定义模型类管理器,然后在模型类中实例化一个模型类管理器的对象,作为模 ...

  9. Django:模型model和数据库mysql(一)

    以一个栗子尝试来记录: 两个表存储在数据库中,BookInfo表示书,HeroInfo表示人物.一本书中有多个人物 在MySQL中新建一个数据库Django1,不用创建表,用Django模型来配置数据 ...

随机推荐

  1. [翻译] KVNProgress

    KVNProgress KVNProgress is a fully customizable progress HUD that can be full screen or not. KVNProg ...

  2. python传递参数给shell

    #格式化字符 print "hello, %s" % ('mm') #传递参数 n="192.168.200.2" os.popen('ping %s -c 2 ...

  3. Python入门学习网址

    Python入门学习网址:http://www.runoob.com/python/python-install.html

  4. matlab中的knn函数

    knn 最邻近分类 Class = knnclassify(test_data,train_data,train_label, k, distance, rule) k:选择最邻近的数量 distan ...

  5. Asp.Net MVC Identity 2.2.1 使用技巧(八)

    一.添加管理链接 在View/Shared/_layout.cshtml,在页面导航上(28行)添加如下代码: @*通过身份验证并确认用户属于Admin角色显示管理菜单*@ @if (Request. ...

  6. The good life is one inspired by love and guided by knowledge

    The good life is one inspired by love and guided by knowledge 伯特兰·罗素Bertrand Russell18721970 I can a ...

  7. [EffectiveC++]item04:Make sure the objects are initialized before they're used

    28 页 C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前. 构造函数的一个较佳的写法是,使用所谓的member initialization list替换赋值动作. 29页 但请立下 ...

  8. 【[CQOI2018]解锁屏幕】

    状压这个东西好像没有什么能优化的高级东西,像什么斜率优化,单调队列在状压的优化上都很少见 而最常见的状压优化就是预处理优化了, 这道题就预处理一下所有点对之间连线上的点,之后压成状态就能做到\(O(2 ...

  9. 4、RabbitMQ-消息应答与消息持久化

    消息应答( Message acknowledgment) 1. Message acknowledgment(消息应答) 执行任务可能需要几秒钟.你可能想知道如果其中一个消费者开始一项长期任务并且只 ...

  10. Kali-linux使用Nessus

    Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Nessus不同于传统的漏洞扫描软件,Nessus可同时在 ...