Django的models模型的具体使用


Posted in Python onJuly 15, 2019

model的常用字段

V=models.CharField(max_length=None[, **options])
#varchar
V=models.EmailField([max_length=75, **options])

#varchar
V=models.URLField([verify_exists=True, max_length=200, **options])

#varchar
V=models.FileField(upload_to=None[, max_length=100, **options])

#varchar
#upload_to指定保存目录可带格式,
V=models.ImageField(upload_to=None[, height_field=None, width_field=None, max_length=100, **options])
V=models.IPAddressField([**options])

#varchar
V=models.FilePathField(path=None[, match=None, recursive=False, max_length=100, **options]) #varchar
V=models.SlugField([max_length=50, **options])

#varchar,标签,内含索引
V=models.CommaSeparatedIntegerField(max_length=None[, **options])

#varchar
V=models.IntegerField([**options])

#int
V=models.PositiveIntegerField([**options])

#int 正整数
V=models.SmallIntegerField([**options])

#smallint
V=models.PositiveSmallIntegerField([**options])

#smallint 正整数
V=models.AutoField(**options)

#int;在Django代码内是自增
V=models.DecimalField(max_digits=None, decimal_places=None[, **options])

#decimal
V=models.FloatField([**options])

#real
V=models.BooleanField(**options)

#boolean或bit
V=models.NullBooleanField([**options])

#bit字段上可以设置上null值
V=models.DateField([auto_now=False, auto_now_add=False, **options])

#date
#auto_now最后修改记录的日期;auto_now_add添加记录的日期
V=models.DateTimeField([auto_now=False, auto_now_add=False, **options])

#datetime
V=models.TimeField([auto_now=False, auto_now_add=False, **options])

#time
V=models.TextField([**options])

#text
V=models.XMLField(schema_path=None[, **options])

#text
——————————————————————————?
V=models.ForeignKey(othermodel[, **options])

#外键,关联其它模型,创建关联索引
V=models.ManyToManyField(othermodel[, **options])

#多对多,关联其它模型,创建关联表
V=models.OneToOneField(othermodel[, parent_link=False, **options])

#一对一,字段关联表属性

经典情景示例

书籍,作者,出版社之间的关系,这里为了便于演示,我们尽量精简了表中的字段,书籍表具有书名,出版社同出版社表建立一对多的关系[foreign key],一本书可以具有多个作者,又同作者表建立多对多的关系[many-to-many],作者表有名称,年龄,出版社表有出版社名称。

from django.db import models
class Publisher(models.Model):
  name = models.CharField(max_length=30)
 
  def __str__(self):
    return self.name
 
class Author(models.Model):
  name = models.CharField(max_length=30)
  age = models.IntegerField()
 
  def __str__(self):
    return self.name
 
class Book(models.Model):
  title = models.CharField(max_length=100)
  authors = models.ManyToManyField(Author)
  publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE)
 
  def __str__(self):
    return self.title

选择对象

获取全体对象

Publisher.objects.all() #获取所有对象

筛选对象

Publisher.objects.filter(name='人们教育出版社') #获取的是一个对象列表
dict = {'name':'lemon','age':18}
Author.objects.filter(**dict) #列表传参的方法

获取单个对象

Publisher.objects.get(name='机械工业出版社') #找不到会报错!!!

对象排序

Author.objects.order_by("name","-age") #可以按照多个字段排序,- 表示逆向排序

连查

Author.objects.filter(name='lemon').order_by('-age')[0]

批量更新

Author.objects.all().update(age='18')

删除对象

Author.objects.filter(name='lemon').delete()

外键和多对多操作

访问外键

Book.objects.get(id=1).publisher #得到书籍的出版社

反向查询

models.Publisher.objects.get(id=1).book_set.all() #反向查询,得到的是一个queryset对象列表

多对多操作

Book.objects.get(id=1).authors.all() #得到queryset对象列表

自定义models方法

class Author(models.Model):
  name = models.CharField(max_length=30)
  age = models.IntegerField()

  def __str__(self):
    return self.name
  def status(self):
    if self.name=='lemon':
      return '帅哥'

运行结果:

aa = models.Author.objects.get(id=1)
print(aa.status())
———————————————运行结果——————————————————
帅哥

自定义manager管理器

class AuthorManager(models.Manager):
  def name_count(self,str_name):
    return self.filter(name__icontains=str_name).count()
class Author(models.Model):
  name = models.CharField(max_length=30)
  age = models.IntegerField()

  def __str__(self):
    return self.name
  def status(self):
    if self.name=='lemon':
      return '帅哥'
  #一旦定义了新的管理器,默认管理器需要显示声明出来才可以使用
  objects = models.Manger() #默认管理器
  object=AuthorManager() #新定义管理器

执行结果:

aa = models.Author.object.name_count('lemon')
print(aa) #——————》2

自定义sql语句

class AuthorManager(models.Manager):
  def age_stat(self, age_int):
    cursor = connection.cursor()
    cursor.execute("""
      SELECT NAME
      FROM app2_author
      WHERE age = %s""", [age_int])
    #fetchall()返回的是元组的列表
    return [row[0] for row in cursor.fetchall()]
    
class Author(models.Model):
  name = models.CharField(max_length=30)
  age = models.IntegerField()
  # objects =models.Manager()
  object=AuthorManager()
  def __str__(self):
    return self.name

执行结果:

aa = models.Author.object.age_stat(18)
print(aa)
-----------------
['lemon', 'Luouo']

过滤字段发方法

__exact 精确等于 like 'aaa'
 __iexact 精确等于 忽略大小写 ilike 'aaa'
 __contains 包含 like '%aaa%'
 __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
Python中map,reduce,filter和sorted函数的使用方法
Aug 17 Python
python3中bytes和string之间的互相转换
Feb 09 Python
Python单例模式的两种实现方法
Aug 14 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
Python pip安装模块提示错误解决方案
May 22 Python
深入理解Python变量的数据类型和存储
Feb 01 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 #Python
anaconda中更改python版本的方法步骤
Jul 14 #Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 #Python
python+opencv像素的加减和加权操作的实现
Jul 14 #Python
Python实现制度转换(货币,温度,长度)
Jul 14 #Python
详解Python Qt的窗体开发的基本操作
Jul 14 #Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 #Python
You might like
怎样在UNIX系统下安装php3
2006/10/09 PHP
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
详解Axios统一错误处理与后置
2018/09/26 Javascript
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
python实现画一颗树和一片森林
2018/06/25 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
Python 音频生成器的实现示例
2019/12/24 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
入党自我评价优缺点
2014/01/25 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
环保建议书100字
2014/05/14 职场文书
酒店管理求职信
2014/06/09 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
同事离别感言
2015/08/04 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
python tkinter实现定时关机
2021/04/21 Python
基于Redis过期事件实现订单超时取消
2021/05/08 Redis
基于Python实现将列表数据生成折线图
2022/03/23 Python