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实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
python实现文本文件合并
Dec 29 Python
使用Python写个小监控
Jan 27 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
Python 实现12306登录功能实例代码
Feb 09 Python
python3使用smtplib实现发送邮件功能
May 22 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 Python
python基于openpyxl生成excel文件
Dec 23 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
配置PHP使之能同时支持GIF和JPEG
2006/10/09 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
表单JS弹出填写提示效果代码
2011/04/16 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
python如何通过protobuf实现rpc
2016/03/06 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
自荐书范文
2013/12/08 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
挂靠协议书范本
2014/04/22 职场文书
工作分析计划书
2014/04/30 职场文书
社区两委对照检查材料
2014/08/23 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书