一、访问外键和多对多值

例如:模型类定义如下

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读书笔记模型高级进阶的更多相关文章

  1. django1.8读书笔记模版高级进阶

    一.概述 想要定制或者扩展模版引擎,模版系统工作原理,自动转移特征 名词解析:模板 渲染 就是是通过从context获取值来替换模板中变量并执行所有的模板标签. 二.Context处理器 如果在模版中 ...

  2. Django笔记 —— 模型高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  3. Django笔记 —— 模板高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  4. 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

    读书笔记 - js高级程序设计 - 第十三章 事件   canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好   有时候即使浏览器支持,操作系统如果缺缺 ...

  5. <数据结构与算法分析>读书笔记--模型

    为了在正式的构架中分析算法,我们需要一个计算模型.我们的模型基本上是一台标准的计算机,在机器中指令被顺序地执行.该模型有一个标准的简单指令系统,如加法.乘法.比较和赋值等.但不同于实际计算机情况的是, ...

  6. django1.8forms读书笔记

    一.HttpRequest对象的一些属性或方法 request.path,The full path, not including the domain but including the leadi ...

  7. R语言实战读书笔记(五)高级数据管理

    5.2.1 数据函数 abs: sqrt: ceiling:求不小于x的最小整数 floor:求不大于x的最大整数 trunc:向0的方向截取x中的整数部分 round:将x舍入为指定位的小数 sig ...

  8. django1.6读书笔记一

    reporter是Article中的一个外键,我们可以有多篇文章指向同一个reporter,然后通过使用article_set.all()就可以返回其所有的headline了,也可以添加条件来筛选. ...

  9. 读书笔记-JavaScript高级程序设计(1)

    1.组合继承 (JavaScript 中最常用的继承模式 ) (position: page168) (书中定义了两个变量名 SuperType   SubType  乍一看 感觉不太能区分,我将改为 ...

随机推荐

  1. OpenNMS编译,打包并在Windows下启动

    1.Download Opennms latest source code 2.Download latest Java JDK and install it. Set JAVA_HOME path ...

  2. MyEclipse中使用Junit插件进行单元测试

    http://wenku.baidu.com/view/ec904a116bd97f192279e9a6.html

  3. android模拟器使用gps定位

    在模拟器上获取GPS信息时,使用Location loc = LocationManager.getLastKnownLocation("gps");来获取location信息,但 ...

  4. 灰度图像二值化-----c++实现

    前天闲着没事干,就写了写BMP图像处理,感觉大家还比较感兴趣..所以现在没事,继续更新..这次简单的写了灰度图像二值化..这是什么概念呢? 图像的二值化的基本原理 图像的二值化处理就是将图像上的点的灰 ...

  5. ORACLE常用监控语句(未完待续)

    --查询日志的切换频率 select  t1.RECID as srecid        ,t2.RECID as erecid        ,t1.FIRST_TIME as stime     ...

  6. PHP高级教程-Session

    PHP Session PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中的 ...

  7. win7系统下用vspd软件进行串口编程实例

    http://blog.csdn.net/qiusuo800/article/details/8299777 目前,我在学习C#串口编程类的基础知识,在网上也找了一些资料,但都存在一些问题,现在他们基 ...

  8. Swift2.1keyword @noescape介绍

    @noescape优化编译器编译,swift 2.1引入. 函数假设有一个一个參数是closure的话,能够在前面加一个关键字@noescape表示在函数return前closure生命周期结束,能够 ...

  9. 关闭xp防火墙

    在控制面版关闭防火墙 禁用“Security Center”服务 禁用“WindowsFirewall/InternetConnectionSharing(ICS)”服务 删除服务:开始运行CMD,命 ...

  10. CentOS7 查看硬盘情况

    lsblk                                  查看分区和磁盘 df -h                                         查看空间使用情 ...