zoukankan      html  css  js  c++  java
  • 多表模型


    昨日回顾:
    1 模板导入
    -写一个模板
    -{%include '模板名字'%}
    2 母版继承
    -写一个母版(留几个盒子),名字叫XX
    -{% block 名字 %}
    {%endblock%}
    -使用:继承母版
    -{%extends 'XX'%}
    -重写盒子(多个盒子,位置无关)
    -{% block 名字 %}
    写内容
    {%endblock%}
    3 静态文件相关
    方式一
    -先创建一个static的文件夹
    -settings配置静态文件
    -STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static')
    ]
    - <link rel="stylesheet" href="/static/utils/bootstrap-3.3.7-dist/css/bootstrap.css">
    -<script src="/static/utils/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
    方式二(动态)
    -使用:{%load static%}
    -<script src="{% static 'utils/bootstrap-3.3.7-dist/js/bootstrap.js'%}"></script>
    方式三:
    -使用:{%load static%}
    -<script src="{% get_static_prefix %}css/mycss.css"></script>

    4 单表操作:
    -mysql数据库:settings里配置
    'default': {
    # key值必须都是大写
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'day76',
    'HOST':'127.0.0.1',
    'PORT':3306,
    'USER':'root',
    'PASSWORD':'admin',
    }
    -在init文件中:
    import pymysql
    pymysql.install_as_MySQLdb()
    -在models中,写类,写类的属性
    #自增,int,主键
    id = models.AutoField(primary_key=True)
    #varchar,长度32
    name = models.CharField(max_length=32)
    #Decimal 长度5,小数位2位
    price = models.DecimalField(max_digits=5, decimal_places=2)
    #日期类型,可以为空
    create_data=models.DateField(null=True)
    -数据库迁移:
    python3 manage.py makemigrations --->只是对数据变更,做记录
    python3 manage.py migrate ---->把变更,同步到数据库
    -新增表,删除表,新增字段,删除字段---->执行数据库迁移的两条命令就可以了
    -单表增:
    -两种方式
    -单表修改:
    -先查询出来,然后update(queryset对象的方法)
    -对象要更新,用save方法
    -单表删除:
    -先查询出来,然后delete(queryset对象和模型对象的方法)
    *****用queryset删除,修改的时候,一定要注意,数据是几条
    -删除数据表中所有数据:Book.objece.all().delete()
    -单表查询
    -all()
    -filter(**kwargs)
    -get(**kwargs) 有且只有一条数据
    -exclude(**kwargs)
    -order_by(*field)
    -reverse()
    -count()
    -first()
    -last()
    -exists()
    -values(*field)
    -values_list(*field)
    -distinct()
    -单表基于双下划线模糊查询
    Book.objects.filter(price__in=[100,200,300])
    Book.objects.filter(price__gt=100)
    Book.objects.filter(price__lt=100)
    Book.objects.filter(price__gte=100)
    Book.objects.filter(price__lte=100)
    Book.objects.filter(price__range=[100,200])
    Book.objects.filter(title__contains="python")---->%python%
    Book.objects.filter(title__endswith="py")----->%py
    Book.objects.filter(title__startswith="py")---->py%
    Book.objects.filter(title__icontains="python")--->忽略大小写
    Book.objects.filter(pub_date__year=2012,pub_date__month=12)

    今日内容:
    1 创建多表模型(详情见代码)
    #用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id
    # ManyToManyField会自动创建第三张表
    # *************重点
    # 一对一的关系:OneToOneField
    # 一对多的关系:ForeignKey
    # 多对多的关系:ManyToManyField

    2 添加表记录
    1 一对多新增
    -两种方式:
    -publish=对象
    -publish_id=id
    2 一对多删除:同单表删除
    3 一对多修改:两种方式,可以传对象,可以传id
    4 一对一跟一对多一样
    5 多对多:
    -add ----->可以传对象,可以传id,可以传多个
    -remove ----->可以传对象,可以传id,可以传多个
    -clear ---->没有参数
    -set ----->跟上面不一样,必须传列表,列表里面可以是对象,可以是id
    3 基于对象的跨表查询
    1 一对一
    正向:正向查询按字段
    反向:反向查询按表名小写
    2 一对多
    正向:正向查询按字段
    反向:反向按表名小写_set.all()
    3 多对多
    正向:正向查询按字段.all()
    反向查询:反向按表名小写_set.all()
    4******基于对象的查询,多次查询(子查询)


    4 基于双下划线的跨表查询
    -连表查询
    -一对一双下划线查询
    -正向:按字段,跨表可以在filter,也可以在values中
    -反向:按表名小写,跨表可以在filter,也可以在values中








  • 相关阅读:
    使用javamail发信过程中的一些问题及解决方法
    互联网标准
    发送邮件报错javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/plain; charset=UTF-8
    在用split分割处理csv数据时,使用不包含在双引号中的逗号进行分割
    java 网络代理官方资料
    ORA-28000错误的原因及解决办法
    日文软件下载站点
    Azure 入门
    ElasticSearch 5学习(10)——结构化查询(包括新特性)
    ElasticSearch 5学习(9)——映射和分析(string类型废弃)
  • 原文地址:https://www.cnblogs.com/fushaunglin/p/9956783.html
Copyright © 2011-2022 走看看