自学记录--django模型使用记录

2023-05-16

对于重要数据都做逻辑删除,不做物理删除,实现方法是定义isDelete字段,类型为BooleanField,默认值为False

【字段类型概括】:

  • AutoField:一个根据实际ID自动增长的IntegerField,通常不指定,如果不指定,一个主键字段将自动添加到模型中
  • BooleanField:true/false 字段,此字段的默认表单控制是CheckboxInput
  • NullBooleanField:支持null、true、false三种值
  • CharField(max_length=字符长度):字符串,默认的表单样式是 TextInput
  • TextField:大文本字段,一般超过4000使用,默认的表单控件是Textarea
  • IntegerField:整数
  • DecimalField(max_digits=None, decimal_places=None):使用python的Decimal实例表示的十进制浮点数
    • DecimalField.max_digits:位数总数
    • DecimalField.decimal_places:小数点后的数字位数
  • FloatField:用Python的float实例来表示的浮点数
  • DateField[auto_now=False, auto_now_add=False]):使用Python的datetime.date实例表示的日期
    • 参数DateField.auto_now:每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
    • 参数DateField.auto_now_add:当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
    • 该字段默认对应的表单控件是一个TextInput. 在管理员站点添加了一个JavaScript写的日历控件,和一个“Today"的快捷按钮,包含了一个额外的invalid_date错误消息键
    • auto_now_add, auto_now, and default 这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果
  • TimeField:使用Python的datetime.time实例表示的时间,参数同DateField
  • DateTimeField:使用Python的datetime.datetime实例表示的日期和时间,参数同DateField
  • FileField:一个上传文件的字段
  • ImageField:继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是个有效的image

        【字段参数约束选项】:通过字段选项,可以实现对字段的约束,在字段对象时通过关键字参数指定

  • null:如果为True,Django 将空值以NULL 存储到数据库中,默认值是 False
  • blank:如果为True,则该字段允许为空白,默认值是 False
  • 对比:null是数据库范畴的概念,blank是表单验证证范畴的
  • db_column:字段的名称,如果未指定,则使用模型类定义时的字段名称
  • db_index:若值为 True, 则在表中会为此字段创建索引
  • verbose_name:在admin后台显示时,字段名字会变成你指定的中文,而数据表中的字段不变
  • default:默认值
  • primary_key:若为 True, 则该字段会成为模型的主键字段
  • unique:如果为 True, 这个字段在表中必须有唯一值
  • choices:可以指定一个元组,那么在页面显示这个字段时文本框会变成下拉框的形式,看例子                 

 

class Pb(models.Model):
    PFLX = (
        (0, '标准配方'),                           看红颜色的标注部分
        (1, '比例配方'),                         
    )
    pbbh = models.CharField(primary_key=True, max_length=50, verbose_name='配方编号')
    pbname = models.CharField(max_length=50, blank=True, null=True, verbose_name='配方名称')
    pftype = models.IntegerField(blank=True, null=True, choices=PFLX, default=0, verbose_name='配方类型(0:标准配方;1:比例配方)')      

在admin后台会这样显示

【数据表之间的关系】:关系的类型包括

                ForeignKey:一对多,将字段定义在多的一端中

                ManyToManyField:多对多,将字段定义在两端

                OneToOneField:一对一,将字段定义在任意一端中

  • 用一访问多:b.hero_set
  • 用一访问一:b.h或h.b
  • 用多访问一:h.h_book,这是访问到一方的对象,h.h_book_id,这是访问到一方的主键字段的值

        【元选项】:

                在模型类中可定义类class Meta:

                db_table = ' ':定义数据表名称,如果不定义数据表的默认名称为数据库名字_模型类名字

                verbose_name = '你好':在admin后台显示时,是中文

                verbose_name_plural = '你好':将模型类的名字变成中文,注意是在admin后台里面,而不是数据库表里面的表名变成中文

        【查询集】:

                1,查询集表示从数据库中获取的对象集合 

                2,查询集可以含有零个、一个或多个过滤器

              3,过滤器基于所给的参数限制查询的结果

              4,从sql的角度,查询集和select语句等价,过滤器像where和limit子句 

            ***查询集通过过滤器查询出结果后返回多个值时是返回一个列表 user = TxUser.objects.filter(pk=1)取对象是需要从列表里取出来user[0].u_name,返回单个值时就可以直接查user = TxUser.objects.get(pk=1)----user.u_name,注意一点是用get的话,如果没有值会报异常DoesNotExist

        【过滤器】:返回查询集的方法叫做过滤器

                all():返回所有对象,是一个列表

                filter(字段=要查询的值):返回符合条件的对象,是一个列表,没有值时是个空列表

                exclude(字段=要查询的值):返回符合条件相反的对象,是一个列表,没有值时是个空列表

                order_by("字段"):对指定的字段进行正序排序,加“-”则为倒序,是一个列表

                values():一个对象构成一个字典,然后构成一个列表返回

                get(字段=要查询的值):返回单个满足条件的对象,如果没有值则会报异常

                count():返回当前查询集对象的个数

                first():返回当前查询集对象的第一个

                last():返回当前查询集对象的最后一个

                exists():判断查询集中是否有对象,有返回True,否则返回False

                ***注意!:filter(字段=查询的值,字段=查询的值) == filter(字段=查询的值).filter(字段=查询的值),exclude()同理

        【字段的查询】:过滤器中的参数就是筛选查询,相当于where语句,语法:字段名称__比较运算符=值

                exact:判等的比较运算符,如果没有写比较运算符,默认表示判等,例如:filter(id=1)就相当于filter(id__exact=1)

                contains:包含的意思,例子:filter(b_name__contains='神'),把字段b_name包含'神'字的查询出来

                startswith,endswith:以值开头或结尾,例子:filter(b_name__endswith='侣'),把值最后的字为"侣"的查询出来

                isnull,isnotnull:是否为null,例子:filter(b_name__isnull=False),把值不为null的查询出来,True的话表示把为null的查询出来

                in:查询列表时要用到,例子:l = [1,2,3,4,5],filter(id__in=l),按照l这个列表的元素去挨个查找,把有的返回过来,返回一个列表,我这里由于id只有一个1,所以返回id为1的对象

                gt,gte,lt,lte:大于,大于等于,小于,小于等于,例子:filter(id__lt=3),把id的值小于三的查询出来

         year,month,day,week,hour,minute,second:年,月,日,周_几?,时,分,秒,例子:filter(b_date__gt=date(1980,12,28)),把日期大于1980.12.28的查询出来

               【多表关联查询:语法:模型类名字__字段名字__比较运算符=值】

                        例子:book.objects.filter(hero__h_name__contains='杨'),把英雄名字带‘杨’字的书查询出来 

聚合函数

  • 使用aggregate()函数返回聚合函数的值
  • 函数:Avg,Count,Max,Min,Sum
from django.db.models import Max
maxDate = list.aggregate(Max('bpub_date'))
  • count的一般用法:
count = list.count()

F对象

  • 可以使用模型的字段A与字段B进行比较,如果A写在了等号的左边,则B出现在等号的右边,需要通过F对象构造
list.filter(bread__gte=F('bcommet'))
  • django支持对F()对象使用算数运算
list.filter(bread__gte=F('bcommet') * 2)
  • F()对象中还可以写作“模型类__列名”进行关联查询
list.filter(isDelete=F('heroinfo__isDelete'))
  • 对于date/time字段,可与timedelta()进行运算
list.filter(bpub_date__lt=F('bpub_date') + timedelta(days=1))

Q对象

  • 过滤器的方法中关键字参数查询,会合并为And进行
  • 需要进行or查询,使用Q()对象
  • Q对象(django.db.models.Q)用于封装一组关键字参数,这些关键字参数与“比较运算符”中的相同
from django.db.models import Q
list.filter(Q(pk_ _lt=6))
  • Q对象可以使用&(and)、|(or)操作符组合起来
  • 当操作符应用在两个Q对象时,会产生一个新的Q对象
list.filter(pk_ _lt=6).filter(bcommet_ _gt=10)
list.filter(Q(pk_ _lt=6) | Q(bcommet_ _gt=10))
  • 使用~(not)操作符在Q对象前表示取反
list.filter(~Q(pk__lt=6))
  • 可以使用&|~结合括号进行分组,构造做生意复杂的Q对象
  • 过滤器函数可以传递一个或多个Q对象作为位置参数,如果有多个Q对象,这些参数的逻辑为and
  • 过滤器函数可以混合使用Q对象和关键字参数,所有参数都将and在一起,Q对象必须位于关键字参数的前面 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自学记录--django模型使用记录 的相关文章

  • Django 表单验证消息未显示

    我试图限制可以以表单上传的文件类型 大小和扩展名 该功能似乎有效 但未显示验证错误消息 我意识到if file size gt 4 1024 1024可能不是最好的方法 但我稍后会处理这个问题 这是 forms py class Produ
  • django 管理站点导航侧边栏搞砸了

    我最近在我的项目中添加了一个包并做了一个pip freeze gt requirements txt然后 然后我做了pip install r requirements txt到我的本地 它添加了一个侧边栏 I did a pip inst
  • Django 的登录代码

    谁能给我一些带有模板代码的示例代码来创建 Django 登录 Thanks 包含示例登录模板在文档中 https docs djangoproject com en stable topics auth default module dja
  • Django:通过外键将两个表连接到第三个表?

    我有三个型号 class A Model class B Model id IntegerField a ForeignKey A class C Model id IntegerField a ForeignKey A 我想要得到 B i
  • Django Social Auth:从 linkedin、twitter 和 facebook 获取电子邮件

    我正在使用 Django Social auth api 通过社交帐户登录 在这里 我想从社交帐户获取电子邮件地址并将其存储在我的数据库表中 可以从帐户中检索名字和姓氏 但无法检索电子邮件地址 个人资料图片 请分享您从社交帐户检索这些详细信
  • Django 找不到记录器“城市”的处理程序

    我正在尝试设置 Django Citieshttps github com coderholic django cities https github com coderholic django cities使用以下命令 sudo pyth
  • 在上下文中模拟计时,以使用 auto_now_add=True 的字段 DateTimeField 创建模型

    我想模拟时间以便能够set特定时间到某个类型的字段DateTimeField with auto now add True在我的测试期间 例如 class MyModel created at models DateTimeField au
  • 无法安装 psycopg2 Ubuntu

    试图为 django 项目准备好服务器 但我在设置 postgres 时遇到了一些问题 我正在遵循本指南 https jee appy blogspot com 2017 01 deply django with nginx html ht
  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • Django 如何从 ManyToManyField 序列化并列出全部

    我正在使用 Django 1 9 1 开发移动应用程序后端 我实现了关注者模型 现在我想列出用户的所有关注者 但目前我不得不这样做 我还使用 Django Rest 框架 这是我的 UserProfile 模型 class UserProf
  • 防止 Celery Beat 运行相同的任务

    我有一个计划的 celery 每 30 秒运行一次任务 我有一个每天作为任务运行 另一个每周在用户指定的时间和一周中的某一天运行 它检查 开始时间 和 下一个预定日期 在任务完成之前 下一个计划日期不会更新 但是 我想知道如何确保 cele
  • django.db.utils.IntegrityError:NOT NULL 约束失败

    我正在尝试为我的网站构建自定义注册 因此我使用配置文件模型进行注册 追溯 Traceback most recent call last File C Python36 lib site packages django core handl
  • Django Channels/Daphne 内部服务器错误“‘dict’对象不可调用”

    我在连接到我的网站时收到此错误 因为它正在运行频道 2018 03 25 20 59 19 049 ERROR http protocol Traceback most recent call last File home virtuale
  • 防止 Django 在并发请求时多次将同一对象保存到数据库

    对于我们的博客平台 我们有一个 文章 模型 其中包含一个 更新的 日期时间字段 class Article models Model updated models DateTimeField null True blank True 当任何
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • Django Group权限如何在模板中打印

    如果客户登录并且有权查看管理员授予他的数据 则他在登录后将看到数据 但如果管理员没有授予他权限 则会显示此消息您无权查看此页面 就我而言 无论管理员授予什么权限 此消息始终会出现您无权查看此页面 from decorators import
  • Django:如何判断 post_save 信号是否在新对象上触发?

    我需要对 Django 中新创建的对象进行一些后台后处理 此后处理只能在新对象上运行 而不是在刚刚更新的对象上运行 我知道在 pre save 中我可以检查该对象是否有 id 如果没有则它是一个新对象 但问题是在后处理中我需要访问id 以便
  • 带有redirect_uri的social-auth-app-django Facebook后端状态

    我知道我的问题听起来像是重复的 但我到处寻找但没有找到任何解决方案 我正在努力为我的 django web 应用程序实现社交登录 到目前为止 谷歌 推特和雅虎登录均按预期工作 但facebook总是给出以下错误 URL 被阻止 此重定向失败
  • Django:CSRF验证失败

    我试图将非 ssl 包装页面提交到 ssl 包装页面 但收到此错误 CSRF verification failed Request aborted Reason given for failure Referer checking fai
  • Django admin.py 未知命令:'collectstatic'

    我已经从 django 1 2 7 升级到 django 1 5 1我正在使用 python 2 6 6当我尝试跑步时python manage py collectstatic i get 未知命令 collectstatic 从我的设置

随机推荐

  • 0.1 + 0.2 不等于0.3 问题,精度的丢失和解决办法

    10个0 1相加不等于1 xff1b 这是因为浮点数精度丢失的问题 xff0c 首先知道在计算机中数字是以二进制的方式存在的 xff0c 那么在CPU中计算0 1 43 0 1时实际上是0 1的二进制的相加 xff1b xff08 0 1
  • Raspberrypi 3 系统备份还原, 基于最小系统镜像实现

    Raspberrypi 3 备份还原系统 一 为什么要备份系统 xff1f 1 经常在树莓派上调试程序 xff0c 安装各种软件 xff0c 越来越多的库和程序的安装带来的系统更改几乎是不可逆的 xff0c 一旦某个程序或者驱动出现问题 x
  • OpenStack(Kilo) + Tenant-OVS-VXLAN(ml2) + Multi-Ext-Net

    from http blog sina com cn s blog 6de3aa8a0102vl7m html 使用VirualBox创建CentOS7虚拟机 资源分配视宿主windows而定 xff0c 由于要部署OpenStack xf
  • 利用策略模式优化if-else

    一 定义 策略模式 Strategy Pattern 策略模式属于对象的行为模式 其用意是针对一组算法 xff0c 将每一个算法封装到具有共同接口的独立的类中 xff0c 从而使得它们可以相互替换 策略模式使得算法可以在不影响到客户端的情况
  • web技术分享| 【高德地图】实现自定义的轨迹回放

    实现 轨迹回放 方式有两种 xff1a 第一种是使用 JS API 和 AMap PolyLine xff08 折线 xff09 等图形配合实现 第二种是使用 JS API 和 AMapUI 组件库 配合使用 xff0c 利用 PathSi
  • ubuntu14.04 忘记了普通用户密码和root密码

    步骤一 xff1a 必须先找回ROOT xff0c 才可以往下做 本文使用的Ubuntu版本为14 04 4 xff0c 具体过程如下为 xff1a 1 重启电脑长按shift键直到进入下图进入GRUB引导模式 xff0c 选择第二行Ubu
  • 乐优商城介绍

    1 乐优商城介绍 1 1 项目介绍 乐优商城是一个全品类的电商购物网站 xff08 B2C xff09 用户可以在线购买商品 加入购物车 下单 秒杀商品可以品论已购买商品管理员可以在后台管理商品的上下架 促销活动管理员可以监控商品销售状况客
  • 使用java中replaceAll方法替换字符串中的反斜杠

    今天在项目中使用java中replaceAll方法将字符串中的反斜杠 34 34 替换成空字符串 34 34 xff0c 结果出现如下的异常 xff1a 1 java util regex PatternSyntaxException Un
  • 正则表达式匹配引号中间的内容怎么写?

    字符串 123 abc 456 匹配结果 abc Answer1 利用先行和后发断言规则 xff1a lt 61 34 61 34 最近总结了一篇关于正则表达式的博文 xff0c 题主不妨一读 xff1a 正则表达式基础 测试代码如下 xf
  • excel将一个工作表根据条件拆分成多个工作表图文教程

    本例介绍在excel中如何将一个工作表根据条件拆分成多个工作表 注意 xff1a 很多朋友反映sheets i delete这句代码出错 xff0c 要注意下面第一个步骤 xff0c 要拆分的数据工作表名称为 数据源 xff0c 而不是你新
  • python3下cv2.imwrite存储带有中文路径

    由于imwrite前使用编码在python3中已经不适用 xff0c 可用imencode代替 xff0c 以下代码是从视频中获取第2帧保存在中文文件夹下的实例 xff1a cap 61 cv2 VideoCapture 34 mp4 34
  • tf.placeholder、feed_dict用法说明

    函数形式 xff1a tf placeholder dtype shape 61 None name 61 None 参数 xff1a dtype xff1a 数据类型 常用的是tf float32 tf float64等数值类型 shap
  • sess.run()

    函数 xff1a run fetches feed dict 61 None options 61 None run metadata 61 None 当构建完图后 xff0c 需要在一个session会话中启动图 xff0c 第一步是创建
  • 卷积神经网络之AlexNet网络详解

    一 介绍 Alex Krizhevsky等人训练了一个大型的卷积神经网络用来把ImageNet LSVRC 2010比赛中120万张高分辨率的图像分为1000个不同的类别 在测试卷上 xff0c 获得很高准确率 top 1 and top
  • 如何分清分布式、高并发与多线程

    当提起这三个词的时候 xff0c 是不是很多人都认为分布式 61 高并发 61 多线程 xff1f 当面试官问到高并发系统可以采用哪些手段来解决 xff0c 或者被问到分布式系统如何解决一致性的问题 xff0c 是不是一脸懵逼 xff1f
  • 利用正则表达式排除特定字符串

    查找不以baidu开头的字符串 baidu com sina com cn 正则 xff1a baidu 匹配结果就是第2行 xff0c 也就是第1行被排除了 这里使用了零宽度断言 exp 注意 xff0c 我们有一个向前查找的语法 也叫顺
  • 自学记录--python小知识

    os path 的一些功能 根据实际项目中的例子来理解一下大体的用法 xff0c 目前只接触了几个方法 例1 xff1a 我是在c python django ttsx2 ttsx goods views py工作 xff0c 运行环境是在
  • django配置连接多个数据库,和把应用名字在admin后台显示为中文

    django配置连接多个数据库 xff0c 自定义表名称 在项目tt下新建两个app xff0c 分别为app01 app02 配置app01使用default节点数据库 xff1b app02使用hvdb节点数据库 xff08 也可以配置
  • 自学记录--字符串,列表,字典的常用方法

    字符串常见操作 如有字符串mystr 61 39 hello world itcast and itcastcpp 39 xff0c 以下是常见的操作 lt 1 gt find 检测 str 是否包含在 mystr中 xff0c 如果是返回
  • 自学记录--django模型使用记录

    对于重要数据都做逻辑删除 xff0c 不做物理删除 xff0c 实现方法是定义isDelete字段 xff0c 类型为BooleanField 默认值为False 字段类型概括 AutoField xff1a 一个根据实际ID自动增长的In