1:字段
1 AutoField(Field) 2 - int自增列,必须填入参数 primary_key=True 3 4 BigAutoField(AutoField) 5 - bigint自增列,必须填入参数 primary_key= 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 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,1)"> 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",1)">ipv6" 56 unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol= 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= 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 = 90 width_field= 91 height_field=None 上传图片的宽度保存的数据库字段名(字符串) 92 93 94 时间: auto_now_add 自动创建时间 95 create_time = models.DateTimeField(auto_now_add= 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)">何穗'),(1,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 validators 39 40 email = forms.CharField(min_length=3,max_length=32,required=41 widget=widgets.TextInput(attrs={class": form_textplaceholder请输入您的邮箱}),1)">42 validators=[validators.RegexValidator(@邮箱格式错误")] '@'用于写自定义正则表达式 43 44
3:元信息
2 nid = models.AutoField(primary_key= 3 username = models.CharField(max_length=32 4 Meta: 5 数据库中生成的表名称 默认 app名称 + 下划线 + 类名 6 db_table = table_name 7 8 联合索引 9 index_together = [ 10 (pub_datedeadline),1)"> ] 13 联合唯一索引 14 unique_together = ((driverrestaurant15 16 admin中显示的表名称 verbose_name 19 verbose_name加s 20 verbose_name_plural
4:多表关系以及参数
1 ForeignKey(ForeignObject) ForeignObject(RelatedField) 2 to,1)"> 要进行关联的表名 3 to_field=None,1)"> 要关联的表中的字段名称 4 on_delete=None,1)"> 当删除关联表中的数据时,当前表与其关联的行的行为 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(可执行对象) 14 def func(): 15 return 10 16 17 MyModel(models.Model): 18 user = models.ForeignKey( 19 to=User,1)"> 20 to_field=id 21 on_delete=models.SET(func),1)"> 22 related_name=None,1)"> 反向操作时,使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all() 23 related_query_name=None,1)"> 反向操作时,使用的连接前缀,用于替换【表名】 如: models.UserGroup.objects.filter(表名__字段名=1).values('表名__字段名') 24 limit_choices_to=None,1)"> 在Admin或ModelForm中显示关联数据时,提供的条件: 25 如: 26 - limit_choices_to={nid__gt': 5 27 - limit_choices_to=lambda : { 28 29 from django.db.models 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中是否显示关联数据 36 37 OneToOneField(ForeignKey) 38 to,1)"> 39 to_field=None 40 on_delete=None,1)"> 41 42 ##### 对于一对一 ###### 43 1. 一对一其实就是 一对多 + 唯一索引 44 2.当两个类之间有继承关系时,默认会创建一个一对一字段 45 如下会在A表中额外增加一个c_ptr_id列且唯一: 46 C(models.Model): 47 nid = models.AutoField(primary_key= 48 part = models.CharField(max_length=12 49 50 A(C): 51 id = models.AutoField(primary_key= 52 code = models.CharField(max_length=1 53 54 ManyToManyField(RelatedField) 55 to,1)"> 56 related_name=None,1)"> 57 related_query_name=None,1)"> 58 limit_choices_to=None,1)"> 59 60 - limit_choices_to={ 61 - limit_choices_to= 62 63 64 - limit_choices_to=Q(nid__gt=10 65 - limit_choices_to=Q(nid=8) | Q(nid__gt=10 66 - limit_choices_to= 67 symmetrical=None,1)"> 仅用于多对多自关联时,symmetrical用于指定内部是否创建反向操作的字段 68 做如下操作时,不同的symmetrical会有不同的可选字段 69 models.BB.objects.filter(...) 70 71 可选字段有:code,id,m1 72 BB(models.Model): 73 74 code = models.CharField(max_length=12 75 m1 = models.ManyToManyField(self 76 77 可选字段有: bb,code,1)"> 78 79 80 code = models.CharField(max_length=12 81 m1 = models.ManyToManyField(False) 82 83 through=None,1)"> 自定义第三张表时,使用字段用于指定关系表 84 through_fields=None,1)"> 自定义第三张表时,使用字段用于指定关系表中那些字段做多对多关系表 85 86 87 Person(models.Model): 88 name = models.CharField(max_length=50 89 90 91 name = models.CharField(max_length=128 92 members = models.ManyToManyField( 93 Person,1)"> 94 through=Membership 95 through_fields=(groupperson ) 97 98 Membership(models.Model): 99 group = models.ForeignKey(Group,on_delete=models.CASCADE) 100 person = models.ForeignKey(Person,1)">101 inviter =102 103 on_delete=models.CASCADE,1)">104 related_name=membership_invites105 106 invite_reason = models.CharField(max_length=64107 db_constraint=True,1)">108 db_table=None,1)"> 默认创建第三张表时,数据库中表的名称
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。