【Django入坑之路】Models操作

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         - 二进制类型
View Code

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             
View Code

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
View Code

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)"> 默认创建第三张表时,数据库中表的名称
View Code

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


注:所有源代码均实测运行过。所有源代码均已上传CSDN,请有需要的朋友自行下载。
继承APIView和ViewSetMixin;作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。ViewSet在开发接口中不经常用。
一、Django介绍Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。Django学习线路Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。这个MVT模式并
本文从nginx快速掌握到使用,gunicorn快速掌握到使用,实现小白快速搭建django项目,并对可能出现的报错进行了分析
uniapp微信小程序订阅消息发送服务通知
Django终端打印SQL语句 1 Setting配置: 2 默认python 使用的MysqlDB连接,Python3 支持支持pymysql 所有需要在app里面的__init__加上下面配置:
url: re_path('authors/$', views.AuthorView.as_view()), re_path('book/(?P\d+)/$', vie
前提 关于html寻找路线: template 如果在各个APP中存在, Django 会优先找全局template 文件下的html文件,如果全局下的template文件没有相关的html Djan
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
from bs4 import BeautifulSoup#kindeditordef kindeditor(request): s = ''' <li><s
view.py 配置 html 配置
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况
自动发送 > 依赖jQuery文件 实例-->GET请求: 手动发送 > 依赖浏览器XML对象(也叫原生ajax) Ajax主要就是使用 【XmlHttpRequest】对象来完成请
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render