Django 知识点补充

1 Django如何在Model保存前做一定的固定操作,比如写一条日志

(1)利用Django的Model的Signal Dispatcher, 通过django.db.models.signals.pre_save()方法,在事件发生前,发射触发信号,

	(1) 信号.connect(执行的函数)

		import logging
from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiver class User(models.Model):
# ... # logging模块 logger = logging.getLogger(__name__)
fh = logging.FileHandler('model_save.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh) (2) receiver装饰器 @receiver(pre_save, sender=Order)
def Log(sender, **kwargs):
logger.debug("{},{}".format(sender, **kwargs))

2 Django的 Q 查询:**

进行相对复杂的查询时,使用django.db.models.Q对象

	from django.db.models import Q
from login.models import Order
#...
Order.objects.get(
Q(id >= 20) & (id <= 100),
Q(num <= 20) | (num >= 30)
)

3 自定义管理器 (默认是objects)**

Django的Queryset是 查询的数据记录,objects 默认Manager管理器

	需要继承Manager 类

		定义 管理器:

			class AuthorManager(models.Manager):
def get_queryset(self):
return super(AuthorManager, self).get_queryset().filter(age__gt=3) class BookManager(models.Manager):
def get_queryset(self):
return super(EditorManager, self).get_queryset().filter(age_lt=2) 使用 管理器: class People(models.Model):
name = models.CharField(max_length=50)
pwd = models.CharField(max_length=50)
age = models.IntegerField() objects = Manager() #默认的管理器
注意 : 自定义其他管理器后,不加上这个默认的,管理器会被自定义的覆盖掉(不能使用) people = models.Manager()
authors = AuthorManager()
editors = EditorManager() # 自己定义的管理器 这时候有多个管理器 使用 : People.authors.all()

4 Django中 model的继承**

1 继承 抽象类 (在 父类中指定 class meta: abstract = True)

	a 子类中 包含了父类中的字段,

	b 但是作为父类的抽象类,由于没有manager,不能创建、保存。

	c 而 在子类中,不可以建立与这个抽象父类中的相同的字段,否则Django表示对报错

	实例:
class Animal(models.Model):
age = models.PositiveIntegerField() # 下面这句决定了Animal是一个抽象类/Model
class Meta:
abstract = True class Human(Animal):
name = models.CharField(max_length=64)
sex = models.CharField('sex', choices=(('m', 'male'), ('f', 'female')), max_length=1)

2 普通继承类 ()

	a 父类子类 都会创建数据表,子类可以操作父类的字段,并会在两张表中都生成数据

	b 同样 子类不能与父类的字段重复

	实例:

		class Animal(models.Model):
age = models.PositiveIntegerField() class Human(Animal):
hid = models.IntegerField(primary_key=True)
name = models.CharField(max_length=64)
sex = models.CharField('sex', choices=(('m', 'male'), ('f', 'female')), max_length=1)

3 代理继承类 (在 子类中指定 class meta: proxy = True)

	a 只创建父类 ,不会创建新的数据表

	b 子类中只能增加方法,而不能增加属性,在不影响父类数据存储的前提下  Proxy model 'Human' contains model fields.
使子类继承父类,此时子类称为父类的“代理”,不影响 父类的数据 实例: class Animal(models.Model):
age = models.PositiveIntegerField()
name = models.CharField(max_length=64,null=True,blank=True,default='')
sex = models.CharField('sex', choices=(('m', 'male'), ('f', 'female')), max_length=1) class Human(Animal):
# hobby = models.CharField(max_length=64,default='')
class Meta:
proxy = True def get_num(self):
return 123 # 可以添加动态字段属性

Django 知识点补充的更多相关文章

  1. django知识点回顾与补充

    一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...

  2. python Django知识点总结

    python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...

  3. swagger知识点补充

    1. swagger知识点补充 1.1. 概述 在swagger的使用过程中,除了网上常见的例子,还会有很多细节上的东西需要注意和改写,这里我列几点我使用过程中遇到的问题和改进方式 1.2. 知识点 ...

  4. set集合,深浅拷⻉以及部分知识点补充

    set集合,深浅拷⻉以及部分知识点补充内容:1. 基础数据类型补充2. set集合3. 深浅拷⻉主要内容: ⼀. 基础数据类型补充⾸先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的 ...

  5. Django组件补充(缓存,信号,序列化)

    Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...

  6. Python学习---django知识补充之CBV

    Django知识补充之CBV Django: url    -->  def函数      FBV[function based view]  用函数和URL进行匹配 url    --> ...

  7. 从零开始的全栈工程师——html篇1.8(知识点补充与浏览器兼容性)

    知识点补充 一.浏览器的兼容问题(关于浏览器的兼容问题 有很多大佬已经解释的很清楚了 这个得自己百度去多花点时间去了解 这里咱们只说一下前面的漏点) 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题 ...

  8. python day4 元组/字典/集合类知识点补充

    目录 python day4 元组/字典/集合类知识点补充 1. 元组tuple知识点补充 2. 字典dict的知识点补充 3. 基本数据类型set 4. 三元运算,又叫三目运算 5. 深复制浅复制 ...

  9. python 知识点补充

    python 知识点补充 简明 python 教程 r 或 R 来指定一个 原始(Raw) 字符串 Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字.字符串与 函数 ...

随机推荐

  1. 【VS2015】未能创建 Visual C# 2015编译器

    今天在安装完成Visual Studio 2015后,在执行update 3时出错,导致再次打开VS2015时提示错误:“未能创建 Visual C# 2015编译器”和“未能正确加载CSharpPa ...

  2. Labview 查看一次while循环运行的时间

    在while循环中增加一个移位寄存器,移位寄存器的初始值使用时间计数器,在while循环里面增加一个减法Vi,再增加一个时间计数器,两者做差,最后显示差值. 在这里只能显示大概运行时间.如下图.

  3. Job流程:提交MR-Job过程

    1.一个标准 MR-Job 的执行入口: //参数 true 表示检查并打印 Job 和 Task 的运行状况 System.exit(job.waitForCompletion(true) ? 0 ...

  4. SaltStack介绍及简单配置-第一篇

    SaltStack介绍 一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, 使其可以用于编配 ...

  5. Linux 网站文件和数据库全量备份 一键脚本(支持FTP,Google Drive)

    原文连接: https://teddysun.com/469.html 此文为转载,建议查看秋水大神的原文,排版更容易查看,另外,建议查看脚本源码,方便了解脚本运行过程, 脚本已测试,大神的脚本一如既 ...

  6. webform CustomValidator

    https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.customvalidator?view=netframew ...

  7. windows下,python3安装django和mysql驱动

    1.安装python3和django (1)Python 下载地址:https://www.python.org/downloads/ (2)Django 下载地址:https://www.djang ...

  8. kylin入门到实战:cube详述

    版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=306 排版乱?请移步原文获得更好的阅读体验 1.什么是cube? cube是所有dimession的组合,每一种 ...

  9. 【cs231n】神经网络学习笔记3

    + mu) * v # 位置更新变了形式 对于NAG(Nesterov's Accelerated Momentum)的来源和数学公式推导,我们推荐以下的拓展阅读: Yoshua Bengio的Adv ...

  10. POJ 2186 Popular Cows(强连通分量Kosaraju)

    http://poj.org/problem?id=2186 题意: 一个有向图,求出点的个数(任意点可达). 思路: Kosaraju算法的第一次dfs是后序遍历,而第二次遍历时遍历它的反向图,从标 ...