django1.8读书笔记模型高级进阶
一、访问外键和多对多值
例如:模型类定义如下
from django.db import models class Publisher(models.Model):
name = models.CharField(max_length=)
address = models.CharField(max_length=)
city = models.CharField(max_length=)
state_province = models.CharField(max_length=)
country = models.CharField(max_length=)
website = models.URLField() def __unicode__(self):
return self.name class Author(models.Model):
first_name = models.CharField(max_length=)
last_name = models.CharField(max_length=)
email = models.EmailField() def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name) class Book(models.Model):
title = models.CharField(max_length=)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField() def __unicode__(self):
return self.title
在定义外键或者多对多的类中访问外键比较方便。直接获得一条数据对象,然后通过外键访问外键关联的对象。
如果想要追溯回来,也可以实现。需要使用_set.all()来获取。使用类名的小写形式。比如
>>> a = Author.objects.get(first_name='Adrian', last_name='Holovaty')
>>> a.book_set.all()
[<Book: The Django Book>, <Book: Adrian's Other Book>]
二、manager是一个对象,django通过它进行数据库查询,每个Django模块至少有一个manager,可以创建自定义manager以定制数据库访问。为模块添加表级功能的首选方法。
需要修改的是
在模型中添加objects属性为继承的manager类,在类中添加新方法即可,不要添加初始函数。
三、执行原始SQL
通过django.db.connection可以实现执行原始SQL语句,通过connection.cursor()得到一个游标对像,通过cursor.execute(sql, [params])来执行SQL语句,通过cursor.fetchone()或者cursor.fetchall()来返回记录集。
>>> from django.db import connection
>>> cursor = connection.cursor()
>>> cursor.execute("""
... SELECT DISTINCT first_name
... FROM people_person
... WHERE last_name = %s""", ['Lennon'])
>>> row = cursor.fetchone()
>>> print row
['John']
说明:将执行的原始SQL语句放在定制的MANAGER或者模型中比较好。
from django.db import connection, models class PersonManager(models.Manager):
def first_names(self, last_name):
cursor = connection.cursor()
cursor.execute("""
SELECT DISTINCT first_name
FROM people_person
WHERE last_name = %s""", [last_name])
return [row[] for row in cursor.fetchone()] class Person(models.Model):
first_name = models.CharField(max_length=)
last_name = models.CharField(max_length=)
objects = PersonManager()
>>> Person.objects.first_names('Lennon')
['John', 'Cynthia']
四、为有外键的表插入数据
django中和sql执行的有点不太一样,在sql中对有外键的表插入数据,在外键字段直接插入对应的外键值即可。在django中需要插入对应的数据对象。
class UserInfo(models.Model):
username = models.CharField(max_length=);
password = models.CharField(max_length=); class LogInfo(models.Model):
user = models.ForeignKey(UserInfo);
timestamp = models.DateTimeField(auto_now_add = True);
django中向loginfo插入数据
u1 = UserInfo.objects.get(username='lisi')
LogInfo.objects.create(user=u1)
django1.8读书笔记模型高级进阶的更多相关文章
- django1.8读书笔记模版高级进阶
一.概述 想要定制或者扩展模版引擎,模版系统工作原理,自动转移特征 名词解析:模板 渲染 就是是通过从context获取值来替换模板中变量并执行所有的模板标签. 二.Context处理器 如果在模版中 ...
- Django笔记 —— 模型高级进阶
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Django笔记 —— 模板高级进阶
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- <数据结构与算法分析>读书笔记--模型
为了在正式的构架中分析算法,我们需要一个计算模型.我们的模型基本上是一台标准的计算机,在机器中指令被顺序地执行.该模型有一个标准的简单指令系统,如加法.乘法.比较和赋值等.但不同于实际计算机情况的是, ...
- django1.8forms读书笔记
一.HttpRequest对象的一些属性或方法 request.path,The full path, not including the domain but including the leadi ...
- R语言实战读书笔记(五)高级数据管理
5.2.1 数据函数 abs: sqrt: ceiling:求不小于x的最小整数 floor:求不大于x的最大整数 trunc:向0的方向截取x中的整数部分 round:将x舍入为指定位的小数 sig ...
- django1.6读书笔记一
reporter是Article中的一个外键,我们可以有多篇文章指向同一个reporter,然后通过使用article_set.all()就可以返回其所有的headline了,也可以添加条件来筛选. ...
- 读书笔记-JavaScript高级程序设计(1)
1.组合继承 (JavaScript 中最常用的继承模式 ) (position: page168) (书中定义了两个变量名 SuperType SubType 乍一看 感觉不太能区分,我将改为 ...
随机推荐
- Grunt学习一:使用grunt创建jquery plugin.
下载安装github客户端. http://windows.github.com 打开github客户端. 登录后,点击左上角的加号,可以创建一个Repository. (也可以点击Clone,将 ...
- XTU1236 Fraction
Fraction Accepted : 124 Submit : 806 Time Limit : 1000 MS Memory Limit : 65536 KB Fraction Problem D ...
- ZOJ 3587 扩展KMP
思路:这题确实大帝做得非常机智!字符串先求最长前缀,反的字符串再求一次最长前缀.然后就能够搞了. 每一个子串出现的次数就是最长前缀的次数嘛! #pragma comment(linker, " ...
- Java+FlashWavRecorder实现网页录音并上传
[注意] 最新版本号请看这里:http://uikoo9.com/blog/detail/java-flashwavrecorder [前言] 肯定有需求要网页录音,并且要上传.这奇葩需求. 然后找到 ...
- UVA 624 CD(DP + 01背包)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music i ...
- VB LISTBOX属性
additem 添加属性 listcount总记录数 listindex索引值 Private Sub Form_Load()List1.AddItem "广东省广州市"List1 ...
- 寻找SQL注入点
如果要对一个网站进行SQL注入攻击,首先就需要找到存在SQL注入漏洞的地方,也就是寻找所谓的注入点.可能的SQL注入点一般存在于登录页面.查找页面或添加页面等用户可以查找或修改数据的地方. 最常用的寻 ...
- 【Linux】别名
别名就是一种快捷方式,以省去用户输入一长串命令的麻烦. 别名有多种实现方式,可以使用函数,也可以使用alias命令 注意:alias命令的作用只是短暂的.一旦终端关闭,别名则失效,如果要让别名永久生效 ...
- Java基础2-容器篇
java基础2-容器篇 1.页首请关注 思维导航大纲 1.常用容器的类型层次结构 2.理解容器的常用思维大纲 a.空间 时间 concurrentModifyException 加载因子 3.常用类源 ...
- JUC-Callable
实现线程的方式有四种: 1,实现runnable接口: 2,继承Thread. 3,也就是本节的Callable接口. 4,使用线程池. 区别: 实现Callable接口的方式,相较于实现Runnab ...