当前位置: 移动技术网 > IT编程>脚本编程>Python > Django的Models操作

Django的Models操作

2019年09月27日  | 移动技术网IT编程  | 我要评论

pbo下载,梁婖婷英文名,艳情魔尊

1:字段

  1 autofield(field)
  2         - int自增列,必须填入参数 primary_key=true
  3 
  4 bigautofield(autofield)
  5         - bigint自增列,必须填入参数 primary_key=true
  6 
  7         注:当model中如果没有自增列,则自动会创建一个列名为id的列
  8         from django.db import models
  9 
 10         class userinfo(models.model):
 11             # 自动创建一个列名为id的且为自增的整数列
 12             username = models.charfield(max_length=32)
 13 
 14         class group(models.model):
 15             # 自定义自增列
 16             nid = models.autofield(primary_key=true)
 17             name = models.charfield(max_length=32)
 18 
 19 smallintegerfield(integerfield):
 20         - 小整数 -32768 ~ 32767
 21 
 22 positivesmallintegerfield(positiveintegerreldbtypemixin, integerfield)
 23         - 正小整数 0 ~ 32767
 24     integerfield(field)
 25         - 整数列(有符号的) -2147483648 ~ 2147483647
 26 
 27 positiveintegerfield(positiveintegerreldbtypemixin, integerfield)
 28         - 正整数 0 ~ 2147483647
 29 
 30 bigintegerfield(integerfield):
 31         - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
 32 
 33 booleanfield(field)
 34         - 布尔值类型
 35 
 36 nullbooleanfield(field):
 37         - 可以为空的布尔值
 38 
 39 charfield(field)
 40         - 字符类型
 41         - 必须提供max_length参数, max_length表示字符长度
 42 
 43 textfield(field)
 44         - 文本类型
 45 
 46 emailfield(charfield):
 47         - 字符串类型,django admin以及modelform中提供验证机制
 48 
 49 ipaddressfield(field)
 50         - 字符串类型,django admin以及modelform中提供验证 ipv4 机制
 51 
 52 genericipaddressfield(field)
 53         - 字符串类型,django admin以及modelform中提供验证 ipv4和ipv6
 54         - 参数:
 55             protocol,用于指定ipv4或ipv6, 'both',"ipv4","ipv6"
 56             unpack_ipv4, 如果指定为true,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both"
 57 
 58 urlfield(charfield)
 59         - 字符串类型,django admin以及modelform中提供验证 url
 60 
 61 slugfield(charfield)
 62         - 字符串类型,django admin以及modelform中提供验证支持 字母、数字、下划线、连接符(减号)
 63 
 64 commaseparatedintegerfield(charfield)
 65         - 字符串类型,格式必须为逗号分割的数字
 66 
 67 uuidfield(field)
 68         - 字符串类型,django admin以及modelform中提供对uuid格式的验证
 69 
 70 filepathfield(field)
 71         - 字符串,django admin以及modelform中提供读取文件夹下文件的功能
 72         - 参数:
 73                 path,                      文件夹路径
 74                 match=none,                正则匹配
 75                 recursive=false,           递归下面的文件夹
 76                 allow_files=true,          允许文件
 77                 allow_folders=false,       允许文件夹
 78 
 79 filefield(field)
 80         - 字符串,路径保存在数据库,文件上传到指定目录
 81         - 参数:
 82             upload_to = ""      上传文件的保存路径
 83             storage = none      存储组件,默认django.core.files.storage.filesystemstorage
 84 
 85 imagefield(filefield)
 86         - 字符串,路径保存在数据库,文件上传到指定目录
 87         - 参数:
 88             upload_to = ""      上传文件的保存路径
 89             storage = none      存储组件,默认django.core.files.storage.filesystemstorage
 90             width_field=none,   上传图片的高度保存的数据库字段名(字符串)
 91             height_field=none   上传图片的宽度保存的数据库字段名(字符串)
 92 
 93 
 94 #时间: auto_now_add 自动创建时间
 95     create_time = models.datetimefield(auto_now_add=true)
 96 # 数据库调用时间格式化传入前端:.strftime("%y-%m-%d")
 97     time = '表对象名字'.create_time.strftime("%y-%m-%d")
 98  ps:格式化的时间传入前端不需要加|safe ,直接填写字典key就可以
 99 
100 floatfield(field)
101         - 浮点型
102 
103 decimalfield(field)
104         - 10进制小数
105         - 参数:
106             max_digits,小数总长度
107             decimal_places,小数位长度
108 
109 binaryfield(field)
110         - 二进制类型

2:字段参数

 1 null                数据库中字段是否可以为空
 2 
 3 db_column           数据库中字段的列名
 4 
 5 default             数据库中字段的默认值
 6 
 7 primary_key         数据库中字段是否为主键
 8 
 9 db_index            数据库中字段是否可以建立索引
10 
11 unique              数据库中字段是否可以建立唯一索引
12 
13 unique_for_date     数据库中字段【日期】部分是否可以建立唯一索引
14 
15 unique_for_month    数据库中字段【月】部分是否可以建立唯一索引
16 
17 unique_for_year     数据库中字段【年】部分是否可以建立唯一索引
18 
19 
20 verbose_name        admin中显示的字段名称
21 
22 blank               admin中是否允许用户输入为空
23 
24 editable            admin中是否可以编辑
25 
26 help_text           admin中该字段的提示信息
27 
28 choices             admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
29                         如:gf = models.integerfield(choices=[(0, '何穗'),(1, '大表姐'),],default=1)
30 
31 error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
32                         字典健:null, blank, invalid, invalid_choice, unique, and 
33 unique_for_date
34                         如:{'null': "不能为空.", 'invalid': '格式错误'}
35 
36 validators          1 #自定义正则
37 
38  from django.core import validators
39  
40      email = forms.charfield(min_length=3, max_length=32, required=true,
41                              widget=widgets.textinput(attrs={"class": "form_text", "placeholder": "请输入您的邮箱"}),
42                              validators=[validators.regexvalidator('@', message="邮箱格式错误")]  #'@'用于写自定义正则表达式
43 
44             

3:元信息

 1 class userinfo(models.model):
 2         nid = models.autofield(primary_key=true)
 3         username = models.charfield(max_length=32)
 4         class meta:
 5             # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
 6             db_table = "table_name"
 7 
 8             # 联合索引
 9             index_together = [
10                 ("pub_date", "deadline"),
11             ]
12 
13             # 联合唯一索引
14             unique_together = (("driver", "restaurant"),)
15 
16             # admin中显示的表名称
17             verbose_name
18 
19             # verbose_name加s
20             verbose_name_plural

4:多表关系以及参数

  1 foreignkey(foreignobject) # foreignobject(relatedfield)
  2         to,                         # 要进行关联的表名
  3         to_field=none,              # 要关联的表中的字段名称
  4         on_delete=none,             # 当删除关联表中的数据时,当前表与其关联的行的行为
  5                                         - models.cascade,删除关联数据,与之关联也删除
  6                                         - models.do_nothing,删除关联数据,引发错误integrityerror
  7                                         - models.protect,删除关联数据,引发错误protectederror
  8                                         - models.set_null,删除关联数据,与之关联的值设置为null(前提fk字段需要设置为可空)
  9                                         - models.set_default,删除关联数据,与之关联的值设置为默认值(前提fk字段需要设置默认值)
 10                                         - models.set,删除关联数据,
 11                                                       a. 与之关联的值设置为指定值,设置:models.set(值)
 12                                                       b. 与之关联的值设置为可执行对象的返回值,设置:models.set(可执行对象)
 13 
 14                                                         def func():
 15                                                             return 10
 16 
 17                                                         class mymodel(models.model):
 18                                                             user = models.foreignkey(
 19                                                                 to="user",
 20                                                                 to_field="id"
 21                                                                 on_delete=models.set(func),)
 22         related_name=none,          # 反向操作时,使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all()
 23         related_query_name=none,    # 反向操作时,使用的连接前缀,用于替换【表名】     如: models.usergroup.objects.filter(表名__字段名=1).values('表名__字段名')
 24         limit_choices_to=none,      # 在admin或modelform中显示关联数据时,提供的条件:
 25                                     # 如:
 26                                             - limit_choices_to={'nid__gt': 5}
 27                                             - limit_choices_to=lambda : {'nid__gt': 5}
 28 
 29                                             from django.db.models import q
 30                                             - limit_choices_to=q(nid__gt=10)
 31                                             - limit_choices_to=q(nid=8) | q(nid__gt=10)
 32                                             - limit_choices_to=lambda : q(q(nid=8) | q(nid__gt=10)) & q(caption='root')
 33         db_constraint=true          # 是否在数据库中创建外键约束
 34         parent_link=false           # 在admin中是否显示关联数据
 35 
 36 
 37     onetoonefield(foreignkey)
 38         to,                         # 要进行关联的表名
 39         to_field=none               # 要关联的表中的字段名称
 40         on_delete=none,             # 当删除关联表中的数据时,当前表与其关联的行的行为
 41 
 42                                     ###### 对于一对一 ######
 43                                     # 1. 一对一其实就是 一对多 + 唯一索引
 44                                     # 2.当两个类之间有继承关系时,默认会创建一个一对一字段
 45                                     # 如下会在a表中额外增加一个c_ptr_id列且唯一:
 46                                             class c(models.model):
 47                                                 nid = models.autofield(primary_key=true)
 48                                                 part = models.charfield(max_length=12)
 49 
 50                                             class a(c):
 51                                                 id = models.autofield(primary_key=true)
 52                                                 code = models.charfield(max_length=1)
 53 
 54     manytomanyfield(relatedfield)
 55         to,                         # 要进行关联的表名
 56         related_name=none,          # 反向操作时,使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all()
 57         related_query_name=none,    # 反向操作时,使用的连接前缀,用于替换【表名】     如: models.usergroup.objects.filter(表名__字段名=1).values('表名__字段名')
 58         limit_choices_to=none,      # 在admin或modelform中显示关联数据时,提供的条件:
 59                                     # 如:
 60                                             - limit_choices_to={'nid__gt': 5}
 61                                             - limit_choices_to=lambda : {'nid__gt': 5}
 62 
 63                                             from django.db.models import q
 64                                             - limit_choices_to=q(nid__gt=10)
 65                                             - limit_choices_to=q(nid=8) | q(nid__gt=10)
 66                                             - limit_choices_to=lambda : q(q(nid=8) | q(nid__gt=10)) & q(caption='root')
 67         symmetrical=none,           # 仅用于多对多自关联时,symmetrical用于指定内部是否创建反向操作的字段
 68                                     # 做如下操作时,不同的symmetrical会有不同的可选字段
 69                                         models.bb.objects.filter(...)
 70 
 71                                         # 可选字段有:code, id, m1
 72                                             class bb(models.model):
 73 
 74                                             code = models.charfield(max_length=12)
 75                                             m1 = models.manytomanyfield('self',symmetrical=true)
 76 
 77                                         # 可选字段有: bb, code, id, m1
 78                                             class bb(models.model):
 79 
 80                                             code = models.charfield(max_length=12)
 81                                             m1 = models.manytomanyfield('self',symmetrical=false)
 82 
 83         through=none,               # 自定义第三张表时,使用字段用于指定关系表
 84         through_fields=none,        # 自定义第三张表时,使用字段用于指定关系表中那些字段做多对多关系表
 85                                         from django.db import models
 86 
 87                                         class person(models.model):
 88                                             name = models.charfield(max_length=50)
 89 
 90                                         class group(models.model):
 91                                             name = models.charfield(max_length=128)
 92                                             members = models.manytomanyfield(
 93                                                 person,
 94                                                 through='membership',
 95                                                 through_fields=('group', 'person'),
 96                                             )
 97 
 98                                         class membership(models.model):
 99                                             group = models.foreignkey(group, on_delete=models.cascade)
100                                             person = models.foreignkey(person, on_delete=models.cascade)
101                                             inviter = models.foreignkey(
102                                                 person,
103                                                 on_delete=models.cascade,
104                                                 related_name="membership_invites",
105                                             )
106                                             invite_reason = models.charfield(max_length=64)
107         db_constraint=true,         # 是否在数据库中创建外键约束
108         db_table=none,              # 默认创建第三张表时,数据库中表的名称

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网