举例讲解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 获取本机ip地址的两个方法
Feb 25 Python
python分布式环境下的限流器的示例
Oct 26 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
python查看数据类型的方法
Oct 12 Python
pytorch实现MNIST手写体识别
Feb 14 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
Python字符串三种格式化输出
Sep 17 Python
python中的垃圾回收(GC)机制
Sep 21 Python
pandas按照列的值排序(某一列或者多列)
Dec 13 Python
基于flask实现五子棋小游戏
May 25 Python
Python学习开发之图形用户界面详解
Aug 23 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php实现的递归提成方案实例
2015/11/14 PHP
一些不错的js函数ajax
2008/08/20 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
vue实现微信分享功能
2018/11/28 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
python中 chr unichr ord函数的实例详解
2017/08/06 Python
pandas数值计算与排序方法
2018/04/12 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
餐饮营销方案
2014/02/23 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
2016年离婚协议书范文
2016/03/18 职场文书