举例讲解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 初始化多维数组代码
Sep 06 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
python简单获取数组元素个数的方法
Jul 13 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
使用python实现BLAST
Feb 12 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
opencv中图像叠加/图像融合/按位操作的实现
Apr 01 Python
python识别验证码的思路及解决方案
Sep 13 Python
python神经网络学习 使用Keras进行回归运算
May 04 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
Zend公司全球首推PHP认证
2006/10/09 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
什么是JavaScript
2009/08/13 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
vue 子组件修改data或调用操作
2020/08/07 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
Python实现二维有序数组查找的方法
2016/04/27 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
专科毕业生求职简历的自我评价
2013/10/12 职场文书
求职信模板
2014/05/23 职场文书
公务员考察材料范文
2014/12/23 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
如何在python中实现ECDSA你知道吗
2021/11/23 Python
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL
win10清理dns缓存
2022/04/19 数码科技