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传递参数方式小结
Apr 17 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
Python Cookie 读取和保存方法
Dec 28 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
Python基础之元组与文件知识总结
May 19 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
php取出数组单个值的方法
2018/03/12 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
Python实现简易端口扫描器代码实例
2017/03/15 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
Django如何实现上传图片功能
2019/08/16 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
教师师德师风整改措施
2014/10/24 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android