举例讲解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计算时间差的方法
May 20 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
python如何将图片转换为字符图片
Aug 19 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
Python命名空间及作用域原理实例解析
Aug 12 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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开发规范手册之PHP代码规范详解
2011/01/13 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
文字幻灯片
2006/06/26 Javascript
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
投标邀请书范文
2014/01/31 职场文书
仲裁协议书
2014/09/26 职场文书
自荐信格式模板
2015/03/27 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Python中的程序流程控制语句
2022/02/24 Python