举例讲解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实现2014火车票查询代码分享
Jan 10 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
浅谈Python基础之I/O模型
May 11 Python
Python如何快速实现分布式任务
Jul 06 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
python实现类之间的方法互相调用
Apr 29 Python
python破解zip加密文件的方法
May 31 Python
Python中fnmatch模块的使用详情
Nov 30 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
python wxpython 实现界面跳转功能
Dec 17 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
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
学习php分页代码实例
2013/10/24 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
CentOS6.5设置Django开发环境
2016/10/13 Python
Python实现注册登录系统
2017/08/08 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
教师业务学习制度
2014/01/25 职场文书
个人优缺点自我评价
2014/01/27 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
自主招生学校推荐信
2014/09/26 职场文书
MySQL基础(一)
2021/04/05 MySQL