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 + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
Python中dictionary items()系列函数的用法实例
Aug 21 Python
详细解析Python中的变量的数据类型
May 13 Python
对Python中的@classmethod用法详解
Apr 21 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
Python数据存储之 h5py详解
Dec 26 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
利用PyQt中的QThread类实现多线程
Feb 18 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 Python
python中filter,map,reduce的作用
Jun 10 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
谈一谈收音机的高放电路
2021/03/02 无线电
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
PHP速成大法
2015/01/30 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
如何写一份好的自荐信
2014/01/02 职场文书
仓管岗位职责范本
2014/02/08 职场文书
四风存在的原因分析
2014/02/11 职场文书
暑期研修感言
2014/02/17 职场文书
对标管理实施方案
2014/03/12 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
七年级作文之环保作文
2019/10/17 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
JavaScript 对象创建的3种方法
2021/11/17 Javascript
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL