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

对于重要数据都做逻辑删除,不做物理删除,实现方法是定义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对象必须位于关键字参数的前面 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值