2 Model层-模型成员

1 类的属性

  • objects:是Manager类型的对象,用于与数据库进行交互
  • 当定义模型类时没有指定管理器,则Django会为模型类提供一个名为objects的管理器
  • 支持明确指定模型类的管理器
class BookInfo(models.Model):
    ...
    books = models.Manager()
  • 当为模型类指定管理器后,django不再为模型类生成名为objects的默认管理器

2.管理器Manager

管理器是模型类Model的一个属性,用于完成数据库的交互映射  

  • 管理器是Django的模型进行数据库的查询操作的接口,Django应用的每个模型都拥有至少一个管理器
  • 自定义管理器类主要用于两种情况
  1. 更改默认查询器的结果

  2. 定义一个模型类的创建方法
  • 情况一:向管理器类中添加额外的方法:见下面“创建对象”中的方式二
  • 情况二:修改管理器返回的原始查询集:重写get_queryset()方法
class BookInfoManager(models.Manager):
    def get_queryset(self):
        return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
class BookInfo(models.Model):
    ...
    books = BookInfoManager()
 

3.创建对象

  • 当创建对象时,django不会对数据库进行读写操作
  • 调用save()方法才与数据库交互,将对象保存到数据库中
  • 使用关键字参数构造模型对象很麻烦,推荐使用下面的两种之式
  • 说明: _init _方法已经在基类models.Model中使用,在自定义模型中无法使用,

  (1)方式一:在模型类中增加一个类方法

class BookInfo(models.Model):
    ...
    @classmethod
    def create(cls, title, pub_date):
        book = cls(btitle=title, bpub_date=pub_date)
        book.bread=0
        book.bcommet=0
        book.isDelete = False
        return book
引入时间包:from datetime import *
调用:book=BookInfo.create("hello",datetime(1980,10,11));
保存:book.save()
 

  (2)方式二:在自定义管理器中添加一个方法

  • 在管理器的方法中,可以通过self.model来得到它所属的模型类
class BookInfoManager(models.Manager):
    def create_book(self, title, pub_date):
        book = self.model()
        book.btitle = title
        book.bpub_date = pub_date
        book.bread=0
        book.bcommet=0
        book.isDelete = False
        return book

class BookInfo(models.Model):
    ...
    books = BookInfoManager()
调用:book=BookInfo.books.create_book("abc",datetime(1980,1,1))
保存:book.save()
 

#coding=utf-8
from django.db import models

# Create your models here.

class BookInfoManager(models.Manager):
    """管理器"""
    def get_queryset(self):
        return super(BookInfoManager, self).get_queryset().filter(isDelete=False)

    def create(cls,btitle,bpub_date):
        b = BookInfo()
        b.btitle = btitle
        b.bpub_date = bpub_date
        b.bread = 0
        b.bcommet = 0
        b.isDelete = False
        return b

class BookInfo(models.Model):
    """书本信息"""
    btitle = models.CharField(max_length=20)
    bpub_date = models.DateTimeField(db_column=‘pub_date‘) # 别名
    bread = models.IntegerField(default=0)
    bcommet = models.IntegerField(null=True)   # 整数
    isDelete = models.BooleanField(default=False)

    class Meta:  # 元数据选项
        db_table = ‘bookinfo‘  # 默认表名字 booktest_BookInfo
        # ordering = [‘id‘]  # 排序规则

    books1 = models.Manager()
    books2 = BookInfoManager()

    # def __init__(self):  # Model里面有__init__
    #     pass

    @classmethod
    def create(cls,btitle,bpub_date):
        b = BookInfo()
        b.btitle = btitle
        b.bpub_date = bpub_date
        b.bread = 0
        b.bcommet = 0
        b.isDelete = False
        return b

class HeroInfo(models.Model):
    """英雄信息表"""
    hname = models.CharField(max_length=10)
    hgender = models.BooleanField(default=True)
    hcontent = models.CharField(max_length=1000)
    isDelete = models.BooleanField(default=False)
    book = models.ForeignKey(BookInfo)     # 外键 一本书对应多个英雄

Model文件

4.实例的属性

  • DoesNotExist:在进行单个查询时,模型的对象不存在时会引发此异常,结合try/except使用

5.实例的方法

  • str (self):重写object方法,此方法在将对象转换成字符串时会被调用
  • save():将模型对象保存到数据表中
  • delete():将模型对象从数据表中删除

原文地址:https://www.cnblogs.com/venicid/p/8280705.html

时间: 2024-10-23 15:30:13

2 Model层-模型成员的相关文章

2 Model层 - 模型查询

1.简介 查询集表示从数据库中获取的对象集合 查询集可以含有零个.一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句 接下来主要讨论如下知识点 查询集 字段查询:比较运算符,F对象,Q对象 2.查询集 在管理器上调用过滤器方法会返回查询集 查询集经过过滤器筛选后返回新的查询集,因此可以写成链式过滤 惰性执行:创建查询集不会带来任何数据库的访问,直到调用数据时,才会访问数据库 何时对查询集求值:迭代,序列化,与if

网络基础笔记——OSI七层模型

OSI七层模型 由于整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等.如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只程序都需要改写.所以我们将整个网络分成数层,每层都有自己独立的功能,而且每层的代码都可以独立撰写,因为相互之间不会干扰.如此一来,当某个小环节出现问题时,只要将该层的代码改写即可.并且这样可以让整个网络层次更加的清晰. 在网络上传输信息就像是一个发包裹的过程,从己方的应用程序开始往第七层的包裹里塞数据,再依次塞到第一层的包

MVC5中Model层开发数据注解

ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数据显示(在View层显示相应的数据) 数据注解相关的命名空间如下: System.ComponentModel.DataAnnotations System.ComponentModel.DataAnnotations.Schema System.Web.Mvc System.Web.Securit

对于社保截止日接口的学习记录---在yii1.1中公共service层对model层的调用

需要明确的一点,sql语句或者yii自带的find和findall方法这些操作,都需要放在model层,在对应的model里面创建一个方法.写上这些sql语句,有三个例子: 1.这个方法是通过截止日期来获取城市的信息. /** *根据截止日期来获取城市信息 *@paramarray$deadline_day社保截止日期 *@returnarray *@authorxcz */ publicfunctiongetCityDataByDeadline($deadline_day){ $sql="SE

CCNA 3 OSI七层模型与TCP/IP协议栈

第三节 OSI参考模型 一个地方被攻击,另一个地方还可以运转,这是备份. 指定一些规则去明确数据交换的格式.介质. examples:  OSI参考模型(Open System International)RM(reference Model) 制作OSI七层模型的好处,每个层做每个层的事情. 第七层 应用层  Application 作用:给不同的应用分配不同的资源. 功能:FTP,Web服务(http),SMTP,QQ,wechat.... 第六层 表示层 Persentaion 作用:解析

osi 七层模型与tcp/ip 四层参考

一.七层?四层? OSI模型(Open System Interconnection Reference Model,缩写为OSI),全名"开放式系统互联通信参考模型",是一个试图使各种计算机在全世界范围内互联为网络的标准框架.1983年,国际标准组织(ISO)发布了著名的ISO/IEC 7498标准,它定义了网络互联的7层框架,也就是开放式系统互联参考模型 1.为什么需要协议? 什么是协议(protocol)?通俗的来讲,协议是一种双方都明白或者必须遵守的事先约定,比如说长城上放狼烟

OSI七层模型,讲解tcp/ip五层涉及的网络协议,网络通信实现,结合协议来看网络通信流程

当我们通过自己电脑的浏览器访问京东的时候, 览器上输入了一个网址,但是我们都知道,互联网连接的电脑互相通信的是电信号,我们的电脑是怎么将我们输入的网址变成了电信号然后发送出去了呢,并且我们发送出去的消息是不是应该让京东的服务器能够知道,我们是在请求它的网站呢,也就是说京东是不是应该知道我发送的消息是什么意思呢.是不是发送的消息应该有一些固定的格式呢?让所有电脑都能识别的消息格式,他就像英语成为世界上所有人通信的统一标准一样,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的intern

TCP/IP 模型 与 OSI 七层模型的对应关系

TCP/IP 模型与 OSI 七层模型 七层有底向上分别是:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. 简化后的四层分别是:主机到网络层(比特).网络层(数据帧).传输层(数据包).应用层(数据段). 每一层对于上一层来讲是透明的,上层只需要使用下层提供的接口,并不关心下层是如何实现的 TCP/IP 模型: (1)数据链路层 主要提供链路控制(同步,异步,二进制,HDLC),差错控制(重发机制),流量控制(窗口机制) 1) MAC:媒体接入控制,主要功能是调度,把逻辑信道映射到

深入浅出-网络七层模型

引言 今天回顾一下--网络七层模型&&网络数据包 网络基本概念 OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织??提出的概念模型,试图??供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架. 它将计算机网络体系结构划分为七层,每层都可以??供抽象良好的接口.了解 OSI 模型有助于理解实际上互联网络的工业标准——TCP/IP 协议. OSI 模型各层间关系和通讯时的数据流向如图所示: OSI 模型 显然.如果一