图书表和英雄表的关系
图书表中一本书种可以有多个英雄,一对多关系
英雄表中一个英雄只能存在于1本图书。(可以有一个英雄对应多个图书,但目前先这么设置)
之前的图书类
class BookInfo(models.Model):
"""图书模型类"""
# 图书名称。CharField说明是一个字符串,max_lenth指定字符串的最大长度
btitle = models.CharField(max_length=20)
# 出版日期,DateField说明是一个日期类型
bpub_date = models.DateField()
创建一个英雄类
class HeroInfo(models.Model):
"""英雄人物模型类"""
# 英雄名
hname = models.CharField(max_length=20)
# 性别 BooleanField说明是bool类型
hgender = models.BooleanField(default=False)
# 备注
hcomment = models.CharField(max_length=128)
# 关系属性,hbook 建立图书类和英雄人物类之间的一对多关系
hbook = models.ForeignKey('BookInfo')
关键代码:
hbook = models.ForeignKey('BookInfo') # 写上对应BookInfo的外键
如图:
创建两个表之间的关联
# 添加b对象的数据
>>> b= BookInfo()
>>> b.btitle = ''天龙八部"
>>> from datatime import date
>>> b.bpub_date = date(1990,1,1)
>>> b.save()
# 注意最后一个关系变量hbook
>>> h = HeroInfo()
>>> h.hname = '段誉'
>>> h.hgender = False
>>> h.hcomment = '六脉神剑'
>>> h.hbook = b
>>> h.save()
>>>> h2 = HeroInfo()
>>> h2.hname = '乔峰'
>>> h2.hcomment = '降龙十八掌'
>>> h2.hbook=b
>>> h2.save()
这里是创建的一条h数据--------->之前创建的一条b数据
模型类的一些操作
查询出booktest_heroinfo表中id为2的数据
>>> h3 = HeroInfo.objects.get(id=2)
>>> h3.hname
'乔峰'
>>> h3.hgender
False
>>> h3.hbook_id
2
>>> h3.hbook
<BookInfo: BookInfo object>
>>> h3.hbook.btitle
'天龙八部'
删除对应的b图书的数据
b.delete()
查询表里面的所有内容
BookInfo.objects.all()
HeroInfo.objects.all()
关系操作: