qiaoliang0302

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

模型类关系

1、一对多关系

例:图书类-英雄类

models.ForeignKey()  定义在多的类中。

2、多对多关系

例:新闻类-新闻类型类  体育新闻   国际

models.ManyToManyField()  定义在哪个类中都可以

3、一对一关系

例:员工基本信息类-员工详细信息类. 员工工号

models.OneToOnefield 定义在那个类中都可以

 

关联查询(一对多)

在一对多关系中,一对应的类我们把它叫做一类,多对应的类我们把它叫做多类,我们把多类中定义的建立关联的类属性叫做关联属性。

例:查询图书id为1的图书关联英雄的信息。

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

b.heroinfo_set.all()

通过模型类查询:

 HeroInfo.objects.filter(hbook__id=1)

例:查询id为1的英雄关联的图书信息。

h = HeroInfo.objects.get(id=1)

h.hbook

通过模型类查询:

 BookInfo.objects.filter(heroinfo__id=1)

通过模型类实现关联查询:

例:查询图书信息,要求图书关联英雄的描述包含"八"。

BookInfo.objects.filter(heroinfo__hcomment__contains="八")

例:查询图书信息,要求图书中的英雄的id大于3。

BookInfo.objects.filter(heroinfo__id__gt=3)

例:查询书名为"天龙八部"的所有英雄。

HeroInfo.objects.filter(hbook_btitle="天龙八部")

通过多类的条件查询一类的数据:

    一类名.objects.filter(多类名小写__多类属性名__条件名)

通过一类的条件查询多类的数据:

    多类名.objects.filter(关联属性__一类属性名__条件名)

 注意:

1、通过模型类实现关联查询时,要查哪个表中的数据,就需要通过哪个类来查。

2、写关联查询条件的时候,如果类中没有关系属性,条件需要些对应类的名,如果类中有关系属性,直接写关系属性。

 

插入、更新、删除

调用一个模型对象的save方法的时候就可以实现对模型类对应数据表的插入和更新。

调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除。

 

自关联

省表、市表、县表(id,title,aParent_id)

自关联是一种特殊的一对多关系。

classAreaInfo(models.Model):

    atitle=models.CharField(max_length=20)

    models.ForeignKey('self',null=True,blank=True)

批量执行sql语句:

source areas.sql;

例:显示广州市的上级地区和下级地区

def areas(request):

    """获取广州市的上级地区和下级地区"""

    #1、获取广州市的信息

    AreaInfo.objects.get(atitle='广州市')

    #2、查询广州市的上级地区

    parent = area.aParent

    #3、查询广州市的下级地区

    children = area.areainfo_set.all()

    # 使用模板

 class AreaInfo(models.Model):

    """地区模型类"""

    #地区名称

    atitle = models.Charfield(max_length=20)

    关系属性,代表当前地区的父级地区

    aParent = models.ForeignKey('self',null = True,blank = True)

 

def areas(request):

    """获取广州市的上级地区和下级地区"""

    #1、获取广州市的信息

    area=AreaInfo.objects.get(atitle = "广州市")

    #2、查询广州市的上级地区

    parent = area.aParent

    #3、查询广州市的下级地址

    children = area.areainfo_set.all()

    # 使用模板

    return render(request,'booktest/areas.thml',{'area':area,'parent':parent,'children':children})

 

    url(r'^area',views.areas),#自关联案例

 

    {{area.atitle}}

    {{parent.atitle}}

    {%  for child in children  %}

          <li>{{  child.atitle  }} </li>

    {%  endfor  %}

 

 

 

 

BookInfo.objects.all()->objects是一个什么东西?

objects是Django帮我自动生成的管理器对象,通过这个管理器可以实现对数据的查询。

objects是models.Manger类的一个对象。自定义管理器之后Django不再帮我们生成默认的objects管理器。

1、自定义一个管理器类,这个类继承models.Manger类。

2、再在具体的模型类里定义一个自定义管理器类的对象。

book = models.Manager()  #自定义一个Manager类的对象

BookInfo.book.all()

 

class BookInfoManager(models.Manager):

 

objects = BookInfoManager()           #自定义一个Manager类的对象

1、改变查询的结果集

2、添加额外的方法

 

 

 

BookInfoManger   -》继承--》models.Manager

BookInfo-->继承-->models.Model

 

posted on 2019-07-13 17:01  qiaoliang0302  阅读(120)  评论(0编辑  收藏  举报