举例讲解Django中数据模型访问外键值的方法


Posted in Python onJuly 21, 2015

先设置一个关于书本(book)的数据模型:

from django.db import models

class Publisher(models.Model):
  name = models.CharField(max_length=30)
  address = models.CharField(max_length=50)
  city = models.CharField(max_length=60)
  state_province = models.CharField(max_length=30)
  country = models.CharField(max_length=50)
  website = models.URLField()

  def __unicode__(self):
    return self.name

class Author(models.Model):
  first_name = models.CharField(max_length=30)
  last_name = models.CharField(max_length=40)
  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=100)
  authors = models.ManyToManyField(Author)
  publisher = models.ForeignKey(Publisher)
  publication_date = models.DateField()

  def __unicode__(self):
    return self.title

 访问外键(Foreign Key)值

当你获取一个ForeignKey 字段时,你会得到相关的数据模型对象。 例如:

>>> b = Book.objects.get(id=50)
>>> b.publisher
<Publisher: Apress Publishing>
>>> b.publisher.website
u'http://www.apress.com/'

对于用`` ForeignKey`` 来定义的关系来说,在关系的另一端也能反向的追溯回来,只不过由于不对称性的关系而稍有不同。 通过一个`` publisher`` 对象,直接获取 books ,用 publisher.book_set.all() ,如下:

>>> p = Publisher.objects.get(name='Apress Publishing')
>>> p.book_set.all()
[<Book: The Django Book>, <Book: Dive Into Python>, ...]

实际上,book_set 只是一个 QuerySet,所以它可以像QuerySet一样,能实现数据过滤和分切,例如:

>>> p = Publisher.objects.get(name='Apress Publishing')
>>> p.book_set.filter(name__icontains='django')
[<Book: The Django Book>, <Book: Pro Django>]

属性名称book_set是由模型名称的小写(如book)加_set组成的。

Python 相关文章推荐
Python splitlines使用技巧
Sep 06 Python
python基础教程之Filter使用方法
Jan 17 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
pandas string转dataframe的方法
Apr 11 Python
python 中字典嵌套列表的方法
Jul 03 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
python3 下载网络图片代码实例
Aug 27 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
python判断元素是否存在的实例方法
Sep 24 Python
变长双向rnn的正确使用姿势教学
May 31 Python
编写自定义的Django模板加载器的简单示例
Jul 21 #Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 #Python
剖析Django中模版标签的解析与参数传递
Jul 21 #Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 #Python
在Django的上下文中设置变量的方法
Jul 20 #Python
在Django中编写模版节点及注册标签的方法
Jul 20 #Python
在Python的Django框架中编写编译函数
Jul 20 #Python
You might like
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
理解javascript中的闭包
2017/01/11 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
vue中的scope使用详解
2017/10/29 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python的函数的一些高阶特性
2015/04/27 Python
对python中的pop函数和append函数详解
2018/05/04 Python
Python BS4库的安装与使用详解
2018/08/08 Python
简单了解python反射机制的一些知识
2019/07/13 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
开工仪式主持词
2014/03/20 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
VUE递归树形实现多级列表
2022/07/15 Vue.js