欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 中model.py详解

程序员文章站 2022-07-02 12:34:51
model详解 Django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表。 创建表 基本结构 from django.db import models # Create your models here. class userinfo(models.Model): ......

model详解

django中遵循 code frist 的原则,即:根据代码中定义的类来自动生成数据库表。

创建表

基本结构

from django.db import models
 
# create your models here.
 
class userinfo(models.model):
    nid = models.autofield(primary_key=true)
    username = models.charfield(max_length=32)
    email = models.emailfield()
    ip = models.genericipaddressfield()
    memo = models.textfield()
    img = models.imagefield()
    usertype=models.foreignkey("usertype",null=true,blank=true)
class usertype(models.model):
    name = models.charfield(max_length=32)
    def __str__(self):
        return self.name

  更多字段:

1、models.autofield  自增列 = int(11)
  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=true。
2、models.charfield  字符串字段
  必须 max_length 参数
3、models.booleanfield  布尔类型=tinyint(1)
  不能为空,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  字符串类型(正则表达式邮箱) =varchar
  对字符串进行正则表达式
9、models.floatfield  浮点类型 = double
10、models.integerfield  整形
11、models.bigintegerfield  长整形
  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_choice = (
        (u'm', u'male'),
        (u'f', u'female'),
    )
gender = models.charfield(max_length=2,choices = gender_choice)
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   上传到哪个位置,更多与image,filepath配合使用

  

连表结构

  1. 一对多:models.foreignkey(其他表)
  2. 多对多:models.manytomanyfield(其他表)
  3. 一对一:models.manytomanyfield(其他表)

应用场景:

应用场景:
 
一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)
    例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。
多对多:在某表中创建一行数据是,有一个可以多选的下拉框
    例如:创建用户信息,需要为用户指定多个爱好
一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了
    例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据

  

更多详解请参考https://blog.csdn.net/com_ma/article/details/77847404?fps=1&locationnum=3 和 https://www.cnblogs.com/blueskyyj/p/11234852.html