zoukankan      html  css  js  c++  java
  • django模型类

    模型类

    ORM

     

    django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作。

    在Django中主要是设计类:模型类。

    ORM另外一个作用:根据设计的类生成数据库中的表。

    模型类设计

    在应用models.py中设计模型类。

    必须继承与models.Model类。

    1)     设计BookInfo类。

    2)     设计HeroInfo类。

     1 from django.db import models
     2 
     3 # Create your models here.
     4 
     5 # 图书类
     6 class BookInfo(models.Model):
     7     """图书模型类"""
     8     # 图书名称 CharField是字符串类型,max_length制定字符串最大长度
     9     btitle = models.CharField(max_length=20)
    10     # 出版日期,DateField是一个日期类型
    11     bpub_date = models.DateField()
    12     
    13     def __str__(self):
    14         # 如果想在admin里看到图书名称 则要重写__str__方法
    15         return self.btitle
    16 
    17 class HeroInfo(models.Model):
    18     """英雄人物模型类"""
    19     # 英雄名称
    20     hname = models.CharField(max_length=20)
    21     # 性别, BooleanField说明是bool类型,default制定默认值,False代表男
    22     hgender = models.BooleanField(default=False)
    23     # 备注
    24     hcomment = models.CharField(max_length=128)
    25     # 关系属性 hbook,建立图书类和英雄人物类的一对多关系
    26     # 关系属性对应的表的字段名格式:关系属性名_id
    27     hbook = models.ForeignKey('BookInfo')
    28     
    29     def __str__(self):
    30         return self.hname

    Models.ForeignKey可以建立两个模型类之间一对多的关系,django在生成表的时候,就会在多端的表中创建一列作为外键,建立两个表之间一对多的关系。

    模型类生成表

    1)  生成迁移文件

    命令:python manage.py makemigrations

     

    迁移文件是根据模型类生成的。

    2)  执行迁移生成表

    命令:python mange.py migrate

    根据迁移文件生成表。

    生成表名的默认格式:

    应用名_模型类名小写

    通过模型类操作数据表

    进入项目shell的命令:

           python manage.py shell

    以下为在相互shell终端中演示的例子:

    首先导入模型类:

           from booktest.models import BookInfo,HeroInfo

    1) booktest_bookinfo表中插入一条数据。

           b = BookInfo() #定义一个BookInfo类的对象

           b.btitle ='天龙八部' #定义b对象的属性并赋值

           b.bpub_date = date(1990,10,11)

           b.save() #才会将数据保存进数据库

    2) 查询出booktest_bookinfo表中id1的数据。

           b = BookInfo.objects.get(id=1)

    3) 在上一步的基础上改变b对应图书的出版日期。

           b.bpub_date = date(1989,10,21)

           b.save() #才会更新表格中的数据

    4) 紧接上一步,删除b对应的图书的数据。

           b.delete() #才会删除

    5) booktest_heroInfo表中插入一条数据。

           h = HeroInfo()

           h.hname = '郭靖'
           h.hgender = False

           h.hcomment = ‘降龙十八掌’

           b2 = BookInfo.objects.get(id=2)

           h.hbook = b2  #给关系属性赋值,英雄对象所属的图书对象

           h.save()

    6) 查询图书表里面的所有内容。

           BookInfo.objects.all()

           HeroInfo.objects.all()

    关联操作

    1) 查询出id为2的图书中所有英雄人物的信息。

           b = BookInfo.objects.get(id=2)

           b.heroinfo_set.all() #查询出b图书中所有英雄人物的信息

  • 相关阅读:
    Angular中文api
    Angular各版本和组件下载
    判断一个浏览器是否支持opacity
    查找函数参数名称
    运行时代码求值
    简单的动画引擎
    利用闭包特性改写addEventListener的回调函数
    springboot指定redis库编号配置实现
    springboot获取IOC(ApplicationContext)实例
    ajax-springMVC提交表单的方式
  • 原文地址:https://www.cnblogs.com/yifengs/p/11512016.html
Copyright © 2011-2022 走看看