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图书中所有英雄人物的信息

原文地址:https://www.cnblogs.com/yifengs/p/11512016.html