djano一对一,多对多,分页

昨日内容:

  1. ORM高级查询

    -filter
    id=3
    id__gt=3
    id__lt=3
       id__lte=3
       id__gte=3
       
    -in /not in
    .filter(id__in=[]) in
      .exclude(id__in=[]) not in
       
    -between......and
    .filter(id__range=[])
       
    -like
    .filter(name__startswith='XX') like 'XX%'
      .filter(name_istartswith='XX') #忽略大小写
      .filter(name__endswith='XX') like'%XX'
      .filter(name__contains='XX') like'%XX%'
      .filter(name_regax='^XX$') like'%XX%'精准匹配
       
    -or
    from django.db.models import Q
       Q和|连用为or
       &为and
       
       
    -order by
    models.UserInfo.objects.all().order_by('id')#升序#('-id')则为降序
       #若有2个值,则第一个先排序,第二个后排序
       
    -group by
    from django.db.models import Sum,Count,Min,Max
    models.UserInfo.objects.values('name').annota1te(xx=Sum('age'))
       models.UserInfo.objects.values('name').annota1te(xx=Sum('age')).filter(XX__gt=50)#二次筛选
       
    -count
    models.UserInfo.objects.count()
       
    -limit分页
    models.UserInfo.objects.all()[X,XX]#利用切分来分页
       
    -distinct
    models.UserInfo.objects.values('XX').distinct()
       
    -原生SQL
    from django.db import connection
       
    -first
    -last两个返回的都是对象

    -only
       返回值为列表里面套对象
       
    -defer
    除了某一列以外的其他对象,返回值为列表套对象、
       
    -F
    拿到某一列的值,但是只能进行数组操作

       
       
  1. XSS -跨脚本(js)攻击

    原因: 服务端太相信客户端传过来的参数

    防止: 对客户端传过来的数据统一进行转译

    django中自带转译 消除django中的转译 {{name|safe}} safe为相信

今日内容:

  1. 一对一

    母表:userinfo
    id     name    age
       1      zekai   18
       2      lxxx    58
       
    private:
       id     salary   sp_id(外键+unique)
       1      5000    1
       2      4000    2
       
       
    一对一:OneToOneField("表名",null=True)默认要求该字段必须是唯一的unique外键关系

    #从母表查询子表的数据
    查询一下name='zekai'的这条数据
    res = models.UserInfo.objects.filter(name='zekai').first()
    print(res.private.salary)
    #res.子表表名小写.子表字段名

    #从字表查询母表中的数据
    查询salary=5000的这个数据所对应的用户的信息
    res= models.Private.objects.filter(salary=5000).first()
    print(res.sp.name,res.sp.age)
    #res.关联的字段名.母表字段名
  2. 多对多

    相亲模型
    boy:
       id   name
       1    laowang
       2    XXX
       
    girl:
       id    name
       1     正正
       2     连连
       3     爱爱
       4     凤姐
       5     乔碧萝
       
    boy2girl
    id     bid    gid
       1    1      1
       2       1      2
       3       1      3
       4       2      2
       5 2      4
       6       2      5
     
    models.py:
       class Boy(models.Model):
       bname=models.CharField(max_length=32,null=True)

    class Girl(models.Model):
       gname=models.CharField(max_length=32,null=True)

    class Boy2Girl(models.Model):
       b = models.ForeignKey("Boy",null=True)
       g = models.ForeignKey("Girl",null=True)


       #联合唯一索引
       class Meta:
           unique_together=[
              ('b','g')
          ]
           
         
       views.py:
           def test1(rsquest):
       boyinfo= [
           models.Boy(bname='雷俊'),
           models.Boy(bname='雷鸣'),
           models.Boy(bname='雷公'),
           models.Boy(bname='雷军'),
           models.Boy(bname='雷峰'),

      ]

       girlinfo=[
           models.Girl(gname='真真'),
           models.Girl(gname='天天'),
           models.Girl(gname='爱爱'),
           models.Girl(gname='凤姐'),
           models.Girl(gname='乔碧萝'),

      ]
       models.Girl.objects.bulk_create(boyinfo)

       b2ginfo=[
           models.Boy2Girl(b_id=1,g_id=1),
           models.Boy2Girl(b_id=2, g_id=4),
           models.Boy2Girl(b_id=3, g_id=3),
           models.Boy2Girl(b_id=4, g_id=5),
           models.Boy2Girl(b_id=5,

转载于:https://www.cnblogs.com/zrx19960128/p/11361105.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值