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 01 Python
Python脚本获取操作系统版本信息
Dec 17 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
Tornado 多进程实现分析详解
Jan 12 Python
pycharm设置注释颜色的方法
May 23 Python
解决Django中多条件查询的问题
Jul 18 Python
python线程中的同步问题及解决方法
Aug 29 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
May 23 Python
pytest配置文件pytest.ini的详细使用
Apr 17 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之面向对象
2013/05/15 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
php实现图片添加水印功能
2014/02/13 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
php-fpm中max_children的配置
2019/03/15 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
JQuery live函数
2010/12/24 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
高考自主招生自荐信
2013/10/20 职场文书
成教自我鉴定
2013/10/27 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
美术毕业生求职信
2014/02/25 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
公司岗位说明书
2015/10/08 职场文书
Tomcat用户管理的优化配置详解
2022/03/31 Servers
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers