美文网首页
day09-模型

day09-模型

作者: wenyilab | 来源:发表于2020-01-30 18:06 被阅读0次

1、模型关系
1)一对多关系
例:图书类-英雄类
models.ForeignKey() 定义在多类中
2)多对多关系
例:新闻类-新闻类型类 体育新闻 国际xinw
models.ManytoManyField() 定义在哪个类中都可以

# 新闻类型类
class NewsType(models.Model):
    # 类型名
    type_name = models.CharField(max_length=20)
    # 关系属性
    type_news = models.ManyToManyField('NewsInfo')

class NewsInfo(models.Model):
    # 新闻标题
    title = models.CharField(max_length=128)
    # 发布时间
    pub_date = models.DateTimeField(auto_now_add=True)
    # 信息内容
    content = models.TextField()
    # 关系属性
    # news_type = models.ManyToManyField('NewsType')

3)一对一关系
例:员工基本信息类-员工详细信息类,员工工号
models.OnetoOneField 定义在哪个类中都可以


# 员工基本信息类
class EmployeeBasicInfo(models.Model):
    # 姓名
    name = models.CharField(max_length=20)
    # 性别
    gender = models.BooleanField(default=False)
    # 年龄
    age = models.IntegerField()
    # 关系属性,代表员工的详细信息
    employee_detail = models.OneToOneField('EmployeeDetailInfo')

# 员工详细信息类
class EmployeeDetailInfo(models.Model):
    # 联系地址
    addr = models.CharField(max_length=256)
    # 教育经历
    # 关系属性,代表员工的基本信息
    employee_basic = models.OneToOneField('EmployeeBasicInfo')

2、关联查询(一对多)
例:查询图书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.object.filter(heroinfo__id__gt=3)

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

HeroInfo.objects.filter(hbook__btitle='天龙八部')

注意:
通过模型类实现关联查询时,要查哪个表中的数据,就需要通过哪个类来查。
写关联查询条件的时候,如果类中没有关系属性,条件需要对应类的名,如果类中有关系属性,直接写关系属性。

3、插入与删除
调用模型对象save方法时就可以完成插入与更新
调用模型对象delete方法时就可以完成删除
4、自关联
自关联是一种特殊的一对多关系
案例:显示广州市的上级地区和下级地区
地区表:id,title,parentid;
mysql终端批量执行sql语句:source areas.sql;

视图函数

def areas(request):
    '''获取广州市的上级地区和下级地区'''
    # 1、获取广州市的信息
    area = AreaInfo.objects.get(atitle = '广州市')
    # 2、查询广州市的上级地区
    parent = area.aParent
    # 3、查询广州市的下级地区
    children = area.areainfo__set.all()
    # 4、使用模版
    return render(request,'booktest/areas.html',
                  {'area':area,'parent':parent,'children':children})

urls

urlpatterns = [
    url(r'^index/$',views.index),
    url(r'^create/$',views.create),
    url(r'^delete(\d+)$',views.delete),
    url(r'^areas$',views.areas),
]

模版文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自关联案例</title>
</head>
<body>
<h1>当前地区</h1>
{{ area.atitle }}<br/>
<h1>父级地区</h1>
{{ parent.atitle }}<br/>
<h1>下级地区</h1>
<ul>
    {% for child in children %}
        <li>{{ child.atitle }}</li>
    {% endfor %}
</ul>
</body>
</html>

5、模型管理器
objects是Django自动生成的models.Manager类对象,自定义管理器之后就不会再生成objects对象。

objects = models.Manager()
objects = BookInfoManager() # 自定义模型管理器

代码
1)改变查询的结果集
2)封装函数:操作模型类对应的数据表(增删改查)


class BookInfoManager(models.Manager):
    '''图书模型管理类对象'''
    # 1、改变查询的结果集
    def all(self):
        # 1、调用父类all,获取所有
        books = super().all()
        # 2、对数据进行过滤
        books = books.filter(isDelete=False)
        # 3、返回books
        return books
    # 2、封装函数:操作模型类对应的数据表(增删改查)
    def create_book(self,btitle,bpub_date):
        # 1、创建一个图书对象
        # 使用self.model可以创建跟自定义管理器对象对应模型类对象
        model_class = self.model
        book = model_class()
        book.btitle = btitle
        book.bpub_date = bpub_date
        # 2、保存对象
        book.save()
        # 3、返回对象
        return book

6、元选项
很重要
指定模型类对应的表名

    class Meta:
        db_table = 'bookinfo'

相关文章

  • day09-模型

    1、模型关系1)一对多关系例:图书类-英雄类models.ForeignKey() 定义在多类中2)多对多关系例:...

  • day09-作业

    1、写一个函数将一个指定的列表中的元素逆序(例如,[1,2,3]->[3,2,1])注意:不要使用列表自带的逆序函...

  • day09-作业

    1.编写一个函数,求1+2+3+...+N 2.编写一个函数,求多个数中的最大值 3.编写一个函数,实现摇色子的功...

  • Day09-作业

    1. 编写⼀个函数,求1+2+3+...+N 2. 编写⼀个函数,求多个数中的最大值 3. 编写⼀个函数,实现摇色...

  • 菜市场

    Day09-活跃 昨天下午,我带着小孩去家属区的后门买菜。 牵着儿子去菜市场的路途中,碰到一个壮实的阿姨挑着一担小...

  • Day09-文件操作

    模块管理函数和类 1.什么是模块: 2.import : 可以通过import关键字导入其他的模块 3.怎么使用模...

  • day09-文件操作

    1. 模块管理函数和类 什么是模块:一个.py文件就是一个模块 import : 可以通过import关键字导入其...

  • day09-每日写作

    01 关于一周弹性计划&多项微习惯今天读了《微习惯》第121-136,提到弹性计划。制定微习惯,,使用微习惯策略...

  • day09-感受高效

    随记 嘻嘻哈,挺开心的。预期六个小时完成的作业,晚8:00-11:00完成了3/4。就是要这么上课!上课全神贯注认...

  • day09-用户管理-笔记

    Day10-用户管理 导读 今日内容1.为用户添加密码为新用户添加密码为用户变更密码密码怎么才算复杂小结2.用户的...

网友评论

      本文标题:day09-模型

      本文链接:https://www.haomeiwen.com/subject/xzlithtx.html