最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Django之ORM的用法

    正文概述    2020-07-21   242

    Django之ORM的用法

    ORM用法

    1.字段类型:

    属性名 = models.字段类型,定义属性时需要指定字段类型, 通过字段类型的参数指定选项。

    属性名

    1.不允许使用python的保留关键字。

    2.不允许使用mysql的保留关键字。

    3.不允许使用连续的下划线,因为Django的查询语法就是连续的下划线。

    AutoField:自动增长的IntegerField, 不指定时Django会自动创建属性名为id的自动增长属性

    BooleanField:布尔字段,值为True或False

    NullBooleanField:支持Null、True、False三种值

    CharField(max_length=20):字符串

    参数max_length表示最大字符个数

    TextFiled:大文本字段,一般超过4000个字符时使用

    IntegerField:整数

    DecimalField(max_digits=None, decimal_places=None):可以指定精度的十进制浮点数

    参数max_digits表示总位数

    参数decimal_places表示小数位数

    FloatField():浮点数 

    DateField[auto_now=False, auto_now_add=False]):日期

    参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。

    参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。

    参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。

    TimeField:参数和DateField一样。

    DateTimeField:日期时间,参数同DateField。

     FileField:上传文件字段,以二进制的形式。

     ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片。

    2.字段选项:

    null:如果为True,表示允许为空,默认值是False。

    blank:如果为True,则该字段允许为空白,默认值是False。

    对比:null是数据库范畴的概念,blank是表单验证范畴的。

    db_column:字段的名称,如果未指定,则使用属性的名称(只限于数据库表中的名字,操作数据库还是类属性的名字)。

    db_index:若值为True, 则在表中会为此字段创建索引,默认值是False(为了优化查询速度 )。

    default:默认值,这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。

    primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。

    unique:如果为True, 这个字段在表中必须有唯一值,这个值不能重复,默认值是False。

    关系型字段类型:关联表中使用

    注意:Django会自动为表创建主键字段

    如果使用选项设置某属性为主键字段后,Django不会再创建自动增长的主键字段

    默认创建的主键字段为id,可以使用pk代替,pk全拼为primary key。

    class PeopleInfo(models.Model):
        name = models.CharField(max_length=20) #人物姓名
        gender = models.BooleanField(default=True) #人物性别
        description = models.CharField(max_length=20) #人物描述
        isDelete = models.BooleanField(default=False) #逻辑删除
        book = models.ForeignKey(BookInfo) # 外键约束,人物属于哪本书
        pub_date = models.DateField(null=True) #日期
        readcount = models.IntegerField(default=0) #阅读量
        commentcount = models.IntegerField(default=0) #评论量
        isDelete = models.BooleanField(default=False) #逻辑删除
     
        # 元类信息 : 修改表名
        class Meta:
            db_table = 'peopleinfo'

    相关推荐:《Python视频教程》

    3.关系字段类型

    关系型数据库的关系包括三种类型:

    ForeignKey:一对多,将字段定义在多的一端中。

    ManyToManyField:多对多,将字段定义在任意一端中。

    OneToOneField:一对一,将字段定义在任意一端中。

    可以维护递归的关联关系,使用self指定。

    4.元选项:

    作用:修改数据库表的默认的名称。

    数据库表的默认名称为 :

      应用名_模型名
      例:Book应用中定义BookInfo模型类
      Book_bookinfo

    在模型类中定义元类Meta,用于设置元信息,使用db_table自定义表的名字

      # 书籍信息模型
      class BookInfo(models.Model):
          name = models.CharField(max_length=20) #图书名称
     
          class Meta: #元信息类
              db_table = 'bookinfo' #自定义表的名字

    5.模型成员

    objects : 管理器对象

    是Manager类型的对象,定义在from django.db import models中。

    用于模型对象和数据库交互

    是默认自动生成的属性,但是可以自定义管理器对象。

    自定义管理器对象后,Django不再生成默认管理器对象objects。

    自定义管理器对象

    为模型类UserInfo自定义管理器对象Users。

      # 用户信息模型
      class UserInfo(models.Model):
          name = models.CharField(max_length=20) #名称
          pub_date = models.DateField(null=True) #日期
          readcount = models.IntegerField(default=0) #阅读量
          commentcount = models.IntegerField(default=0) #评论量
          isDelete = models.BooleanField(default=False) #逻辑删除
     
          #元类信息 : 修改表名
          class Meta:
              db_table = 'Userinfo'
     
          # 自定义管理器对象
          Users = models.Manager()

    自定义管理器对象后,查询数据时直接使用 Users 查询,不再用默认的objects。

    # 书籍列表信息视图
      def userList(request):
          # 查询数据库用户信息 : 默认管理器对象--objects
          # UserInfos = UserInfo.objects.all()
     
          # 查询数据库用户信息 : 自定义管理器对象--Users
         UserInfos = UserInfo.Users.all()
     
          # 构造上下文
          context = {'Userlist':UserInfos}
     
          return render(request, 'User/Userlist.html', context)

    Manager:管理器类

    定义在from django.db import models中

    管理器是Django的模型进行数据库操作的接口,Django应用的每个模型都拥有至少一个管理器。

    Django模型支持自定义管理器类,继承自models.Manager。

    自定义管理器类主要用于两种情况:

    1.修改原始查询集,重写get_queryset()方法

    查询时,如果需要默认过滤掉某些数据,需要修改原始查询集

    2.新增管理器方法,如创建模型对象方法

    当模型属性很多,多数字段为默认值,每次只需要给少数属性赋值时,可以新增模型初始化方法

    自定义管理器类:1.修改原始查询集

    把peopleinfo表中的isDelete字段修改为True(updata peopleinfo set isDelete=1 where id=4),但是逻辑删除字段为True的那条记录依然会被查询出来,这里的解决办法是自定义管理器类,重写get_queryset()方法。

      from django.db import models
     
      # 自定义管理器类
      class PeopleInfoManager(models.Manager):
          # 自定义管理器类场景一:重写get_queryset()方法
          def get_queryset(self):
              # 调用父类的成员语法为:super(子类型, self).成员
              # 默认只查询逻辑删除字段为False的记录
              return super(PeopleInfoManager, self).get_queryset().filter(isDelete=False)

    自定义管理器类:2.新增管理器方法

    新增管理器初始化模型对象方法:只有name属性需要赋值,其他的字段都是默认值.

     # models.py -- 自定义管理器类
      class UserInfoManager(models.Manager):
          # 自定义管理器类场景一:重写get_queryset()方法
          def get_queryset(self):
              # 调用父类的成员语法为:super(子类型, self).成员
              # 默认只查询逻辑删除字段为False的记录
              return super(UserInfoManager, self).get_queryset().filter(isDelete=False)
     
          # 初始化模型对象方法
          def create(self, name):
              user = UserInfo()
              user.name = name
              user.pub_date = '1989-11-11'
              user.readcount = 0
              user.commentcount = 0
              user.isDelete = False
              return user
      # view.py -- User列表信息视图
      def UserList(request):
     
          # 初始化模型对象:自定义管理器类后
          UserInfos = [
              UserInfo.user.create('小明'),
              UserInfo.user.create('小杰'),
          ]
     
          # 构造上下文
          context = {'Userlist':UserInfos}
     
          return render(request, 'User/userlist.html', context)

     相关推荐:

    Django之什么是ORM


    起源地下载网 » Django之ORM的用法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元