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装饰器使用方法实例
Nov 21 Python
python使用百度翻译进行中翻英示例
Apr 14 Python
Python 登录网站详解及实例
Apr 11 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
python3多线程知识点总结
Sep 26 Python
Python内置加密模块用法解析
Nov 25 Python
浅谈python锁与死锁问题
Aug 14 Python
requests在python中发送请求的实例讲解
Feb 17 Python
python3操作redis实现List列表实例
Aug 04 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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读取xml方法介绍
2013/01/12 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
JavaScript工具库之Lodash详解
2019/06/15 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
基于Python的接口测试框架实例
2016/11/04 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
详解python里的命名规范
2018/07/16 Python
Django后台admin的使用详解
2019/07/08 Python
OpenCV 模板匹配
2019/07/10 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
个人求职简历的自我评价
2013/10/19 职场文书
经理管理专业自荐信范文
2013/12/31 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
网络编辑求职信
2014/04/30 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
离婚答辩状范文
2015/05/22 职场文书
红色革命电影观后感
2015/06/18 职场文书
公司考勤管理制度
2015/08/04 职场文书
tomcat下部署jenkins的方法
2022/05/06 Servers