Django 知识点补充
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 知识点补充的更多相关文章
- django知识点回顾与补充
一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...
- python Django知识点总结
python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...
- swagger知识点补充
1. swagger知识点补充 1.1. 概述 在swagger的使用过程中,除了网上常见的例子,还会有很多细节上的东西需要注意和改写,这里我列几点我使用过程中遇到的问题和改进方式 1.2. 知识点 ...
- set集合,深浅拷⻉以及部分知识点补充
set集合,深浅拷⻉以及部分知识点补充内容:1. 基础数据类型补充2. set集合3. 深浅拷⻉主要内容: ⼀. 基础数据类型补充⾸先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的 ...
- Django组件补充(缓存,信号,序列化)
Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...
- Python学习---django知识补充之CBV
Django知识补充之CBV Django: url --> def函数 FBV[function based view] 用函数和URL进行匹配 url --> ...
- 从零开始的全栈工程师——html篇1.8(知识点补充与浏览器兼容性)
知识点补充 一.浏览器的兼容问题(关于浏览器的兼容问题 有很多大佬已经解释的很清楚了 这个得自己百度去多花点时间去了解 这里咱们只说一下前面的漏点) 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题 ...
- python day4 元组/字典/集合类知识点补充
目录 python day4 元组/字典/集合类知识点补充 1. 元组tuple知识点补充 2. 字典dict的知识点补充 3. 基本数据类型set 4. 三元运算,又叫三目运算 5. 深复制浅复制 ...
- python 知识点补充
python 知识点补充 简明 python 教程 r 或 R 来指定一个 原始(Raw) 字符串 Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字.字符串与 函数 ...
随机推荐
- 20145216史婧瑶《Java程序设计》第8周学习总结
20145216 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 通用API 15.1 日志 java.util.logging 包提供了日志功能相关类与接口,不必额外配置 ...
- 20145328 《Java程序设计》第9周学习总结
20145328 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1JDBC 16.1.1JDBC简介 JDBC(Java DataBase Connec ...
- 20145329 《JAVA程序设计》实验三总结
实验日期:2016.4.12 实验时间:15:30~17:30 实验序号:实验三 实验名称: 敏捷开发与XP实践 实验目的与要求: XP基础 XP核心实践 相关工具 实验内容 1.使用git托管代码 ...
- Java -D命令对应的代码中获取-D后面的参数 和 多个参数时-D命令的使用
1. Java代码: public class TestDPara { public static void main(String[] args) { String flag = System.ge ...
- RedHat7.4最小化安装yum源不可用问题解决
本次安装的RedHat7.4是安装在Oracle VM VirtualBox5.2.8虚拟机上面的,本文不对安装虚拟机步骤做详细说明. 工具准备: Oracle VM VirtualBox5.2.8 ...
- asp.net core开发注意事项
1.类库的创建尽量选择.net standard. 如果选择.net core 则.net framework不能调用该类库, .net core和.net framework都可以调用.net st ...
- codeforces103E Buying Sets
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- wamp升级php7
原文:http://blog.csdn.net/cheng6251/article/details/50730441 1.下载php7 http://windows.PHP.net/downloa ...
- 使用@media screen解决移动web开发的多分辨率问题
当今移动设备的发展已经越来越迅速,移动web开发的需求也越来越多多.许多大平台.大门户都纷纷推出了自己的移动web版网站. 随着移动设备飞速的发展,移动产品的屏幕规格越来越多.从几年前的320×240 ...
- delphi ScriptGate 调用JS
在 FireMonkey 使用 TWebBrowser 调用 Javascript函数并获取返回值以及 JavaScript 中调 Delphi 的函数/过程,普遍都在使用老掉牙的URL重定的方法,还 ...